編集したフィールドが「ワン クリック ビハインド」で更新される場合は、通常、リバウンドしたと思ってGridView
いたが実際にはリバウンドしていないか、更新を行う前にリバウンドしたことが原因です。
Gridview では、フィールドをフッターに配置するときの一般的なシナリオは、ページ ライフサイクルのデータ バインディング操作中にその値を計算することです。
.aspx ファイルはいくつかのフッター フィールドを定義しますが、通常はsBoundField
に変換されたものTemplateField
です。ここにスニペットがあります:
<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
再バインドされ、毎回フッター フィールドが再計算されます。