ASP.Net网格视图在Gridview中滚动总计

时间:2009-05-10 19:38:27

标签: asp.net vb.net gridview

我已经看过几个关于如何实现这个目标的教程。

但是在我看来,他们需要很多关于如何以编程方式引用每个项目的先验知识。

是否有人有链接或可以创建一个相对基本的示例,说明如何在页脚中为ASP获取运行总计:Gridview?

4 个答案:

答案 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