Ако установите, че вашите редактирани полета се обновяват „с едно щракване назад“, обикновено това се дължи на това, че си мислите, че сте възстановили своя 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, това ще доведе до Postback и ще накара GridView
да се обвърже отново, което трябва да преизчислява полетата в долния колонтитул всеки път.
person
fnostro
schedule
14.04.2016