Если вы обнаружите, что ваши отредактированные поля обновляются «на один клик позже», обычно это происходит из-за того, что вы думаете, что восстановили свой GridView
, но на самом деле это не так, или вы восстановили его перед выполнением обновления.
С Gridview типичным сценарием всякий раз, когда вы размещаете поля в нижнем колонтитуле, является вычисление его значений во время операций привязки данных жизненного цикла страницы.
Это выглядит так: ваш файл .aspx определяет некоторые поля нижнего колонтитула, обычно некоторые BoundField
, которые были преобразованы в TemplateField
s. Вот фрагмент:
<asp:GridView ID="GridView1" runat="server" ShowFooter="true" ...>
<Columns>
<asp:BoundField DataField="Field1" HeaderText="Title" SortExpression="Field1" />
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Field2") %>' ></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="FooterLabel1" runat="server" Text="" ></asp:Label>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
События GridView в коде позади: обычно это то, что вам нужно сделать, чтобы заполнить поля нижнего колонтитула на основе изменения значений строк. Это VB, но вы должны быть в состоянии преобразовать его достаточно легко.
// Create a variable at the Page level that will exist for
// the duration of the Page LifeCycle
Private FooterLabel1SubTotal as Double
// Initialize
Private Sub GridView1_DataBinding(sender As Object, e As EventArgs) Handles GridView1.DataBinding
FooterLabel1SubTotal = 0.0
End Sub
// Accumulate
Private Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataRow Then
Dim Field2 as Label = e.Row.FindControl("Field2")
FooterLabel1SubTotal += Convert.ToDouble(Field2.Text)
End If
End Sub
// Populate Footer with formated value
Private Sub GridView1_DataBound(sender As Object, e As EventArgs) Handles GridView1.DataBound
FooterLabel1 = GridView1.FooterRow.FindControl("FooterLabel1")
FooterLabel1.Text = String.Format("{0:F2}", FooterLabel1SubTotal)
End Sub
Теперь, если вы используете какие-либо встроенные функции редактирования GridView, это вызовет обратную передачу и приведет к повторной привязке GridView
, что должно каждый раз пересчитывать поля нижнего колонтитула.
person
fnostro
schedule
14.04.2016