0

GridView を使用する C# で作成された ASP.NET プロジェクトがあります。フッター行には、データから設定された値に対する列データに基づく合計の比率が含まれており、いくつあるべきかを示しています。ユーザーは 2 番目の値を変更し、フッターを更新できる必要があります。これを行う方法、または可能かどうかさえわかりません。下に別の GridView を使用することを考えましたが、列の行が 2 つの間で確実に同期されるようにするのは悪夢です。何か案は?

また、(行の編集/更新を使用して) 列データを変更すると、[更新] をクリックしても合計が更新されませんが、[編集] をもう一度クリックすると更新されます。これがなぜなのか、更新時にフッターの合計を更新する方法を誰か教えてもらえますか?

4

1 に答える 1

0

編集したフィールドが「ワン クリック ビハインド」で更新される場合は、通常、リバウンドしたと思って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再バインドされ、毎回フッター フィールドが再計算されます。

于 2016-04-14T22:01:12.623 に答える