我有一个用C#创建的ASP.NET项目,它使用GridViews。页脚行包含基于列数据的总数与设置值的比率,该数据表示应该有多少数据。用户需要能够修改第二个值并更新页脚。我无法找到如何做到这一点,即使有可能。我打算在下面使用另一个GridView,但确保两者之间的列线同步是一场噩梦。有什么想法吗?
此外,当我更改列数据(使用编辑/更新行)时,单击“更新”时不会更新总数,但是当我再次单击“编辑”时,总数不会更新。任何人都可以告诉我为什么会这样以及如何在更新时更新页脚中的总数?
答案 0 :(得分:0)
如果您发现已修改的字段已刷新并且#34;只需点击一下"通常是因为你认为你已经反弹GridView
但实际上还没有反弹,或者在你做出更新之前你已经反弹。
使用Gridview,每当您在页脚中放置字段时,典型的情况是在页面生命周期的数据绑定操作期间计算它的值
就像这样,你的.aspx文件定义了一些页脚字段,通常是一些已转换为BoundField
的{{1}}。这是一个片段:
TemplateField
后面的代码中的GridView事件:这通常是您需要根据更改的行值填充页脚字段。这是VB,但你应该能够轻松地转换它。
<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的任何内置编辑功能,那将导致回发并导致// 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
重新绑定,这应该每次重新计算页脚字段。