我有一个使用 GridViews 的 C# 创建的 ASP.NET 项目。页脚行包含基于列数据的总数与来自数据的设定值的比率,说明应该有多少。用户需要能够修改第二个值并更新页脚。我无法找出如何做到这一点,或者即使有可能。我考虑在下面使用另一个 GridView,但确保两者之间的列线同步是一场噩梦。有任何想法吗?
此外,当我更改列数据(使用编辑/更新行)时,当我单击更新时总数不会更新,但当我再次单击编辑时会更新。谁能告诉我为什么会这样以及如何在更新时更新页脚中的总数?
我有一个使用 GridViews 的 C# 创建的 ASP.NET 项目。页脚行包含基于列数据的总数与来自数据的设定值的比率,说明应该有多少。用户需要能够修改第二个值并更新页脚。我无法找出如何做到这一点,或者即使有可能。我考虑在下面使用另一个 GridView,但确保两者之间的列线同步是一场噩梦。有任何想法吗?
此外,当我更改列数据(使用编辑/更新行)时,当我单击更新时总数不会更新,但当我再次单击编辑时会更新。谁能告诉我为什么会这样以及如何在更新时更新页脚中的总数?
如果您发现您编辑的字段被“单击后”刷新,通常是因为您认为您已经反弹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
重新绑定,这将每次重新计算页脚字段。