我已经看过几个关于如何实现这个目标的教程。
但是在我看来,他们需要很多关于如何以编程方式引用每个项目的先验知识。
是否有人有链接或可以创建一个相对基本的示例,说明如何在页脚中为ASP获取运行总计:Gridview?
答案 0 :(得分:2)
这就是我使用的:
protected void InvoiceGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
var invoice = (Invoice) e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.Header)
{
totalAmt = 0;
}
else if (e.Row.RowType == DataControlRowType.DataRow)
{
totalAmt += invoice.Amount;
}
else if (e.Row.RowType == DataControlRowType.Footer)
{
var amountTotalLabel = (TextBox) e.Row.FindControl("AmountTotalTextBox");
amountTotalLabel.Text = totalAmt.ToString("0.00");
}
}
TotalAmt是页面上受保护的实例变量。根据您对“程序化知识”的评论,不确定这是否是您所寻找的。但它的工作原理相当直接。在这种情况下,gridview绑定到List<Invoice>
。
答案 1 :(得分:0)
添加页脚模板并在RowDataBound上,有一个全局变量来存储总和,
在e.Row.RowType = DataControlRowType.DataRow类型中执行求和,并且@ e.Row.RowType = DataControlRowType.Footer将vale存储在适当的单元格中
了解详情@ MSDN LINK
答案 2 :(得分:0)
我就是这样做的。很容易。您只需将包含数字的行相加并将其放在页脚中。
((Label)GridView.FooterRow.Cells[1].FindControl("your_label")).Text = ds.Tables[0].Compute("sum(Column_name)", "").ToString();
答案 3 :(得分:0)
我认为我使用的方法非常基本,并且不需要以编程方式引用Gridview中的列,如果这就是你的意思。这是一个很好的部分,一旦你编写了后端函数,你可以通过编辑.aspx文件将总数添加到任何Gridview。
在GridView中,按以下方式创建列:
<asp:TemplateField HeaderText="Hours">
<ItemTemplate><%#DisplayAndAddToTotal(Eval("Hours").ToString(), "Hours")%></ItemTemplate>
<FooterTemplate><%#GetTotal("Hours")%></FooterTemplate>
</asp:TemplateField>
只要在GetTotal中使用相同的字符串,DisplayAndAddToTotal的第二个参数就可以是您想要的任何字符串。我通常只是再次使用字段名称。以下是使用的两个函数DisplayAndAddToTotal和GetTotal。他们使用Hashtable存储总计,以便它可以与您想要添加的任意数量的列一起使用。它们还可以计算布尔字段的“真”数。
Protected total As Hashtable = New Hashtable()
Protected Function DisplayAndAddToTotal(itemStr As String, type As String) As Double
Dim item As Double
If itemStr = "True" Then
item = 1
ElseIf Not Double.TryParse(itemStr, item) Then
item = 0
End If
If total.ContainsKey(type) Then
total(type) = Double.Parse(total(type).ToString()) + item
Else
total(type) = item
End If
Return item
End Function
Protected Function GetTotal(type As String) As Double
Try
Dim result As Double = Double.Parse(total(type).ToString())
Return result
Catch
Return 0
End Try
End Function