使用行单元格的网格视图列的总和

本文关键字:视图 网格 单元格 | 更新日期: 2023-09-27 18:33:40

我正在尝试在我的网格视图中查找列的所有单元格的总和。 但是我收到错误:

我正在尝试计算整个列并将其扔到网格视图之外的标签中。

Row.Cells[4] 的输出是 459.00

输入字符串的格式不正确。

在线: 第 509 行: 总和 += 十进制.解析(c.文本);

这是我的代码:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.DataItem != null)
    {
        // Set the capacity label text
        Label4.Text = e.Row.Cells[4].Text;

        // Calc the sum of all of the row values
        decimal sum = 0;
        foreach (TableCell c in e.Row.Cells)
        {
            sum += Decimal.Parse(c.Text);
        }

        // Set the sum label text value
        Label5.Text = sum.ToString();
    }
}

使用行单元格的网格视图列的总和

您可能

还需要检查 Row.ItemType 是否是一个项目,而不是标题。 此外,这样做更安全:

decimal val;
foreach (..)
{
//only call Trim() if you know the text is not null.
If (Not Decimal.TryParse(c.Text.Trim()), out val) {
   //error condition; you can throw an exception just for testing to verify something is or isn't right
   throw new Exception("Error, field is not a decimal: " + c.Text);
}
else { 
    sum += val;
}

此外,任何总计也必须在 ItemDataBound 事件之外完成。 因此,将总数设置为标签不是合适的时机。

将总和设为全局变量。

decimal sum = 0;

然后对于每一行添加到全局变量:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
    {
        // Set the capacity label text
        sum += Decimal.Parse(e.Row.Cells[4].Text);
    }
}

然后在page_prerender中输入以下内容:

// Set the sum label text value
Label5.Text = sum.ToString();