尝试对gridview列值求和时,输入字符串格式不正确

时间:2017-01-14 15:32:13

标签: c# asp.net

我知道这是一个常见的问题,但是找不到任何令人满意的问题。我的gridview列值和代码和我想要求和的值的类型是十进制。我想总和总量值并显示在gridview列下面的文本框值第4列我要求和,它的类型是十进制

code

public void TypeTotalAmount()
{
    decimal sum = 0;
    for (int i = 0; i < typeWiseGridView.Rows.Count; i++)
    {
        sum += decimal.Parse(typeWiseGridView.Rows[i].Cells[1].Text);
    }
    totalTextBox.Text = sum.ToString();
}

2 个答案:

答案 0 :(得分:1)

使用Value.Tostring()属性

 decimal sum = 0;
            for (int i = 0; i < dataGridView1.Rows.Count; i++)

            {
                sum += decimal.Parse(dataGridView1.Rows[i].Cells[0].Value.ToString());

            }

答案 1 :(得分:1)

我建议你使用RowDataBound事件而不是循环单元格内容。这种方法的问题是单元格内容始终是一个字符串。因此,如果您将其格式化为货币,则无法将其转换回小数,因为单元格内容现在还包含货币符号。

假设您使用它来绑定GridView

<asp:BoundField DataField="totalFee" HeaderText="Total Fee" DataFormatString="{0:C2}" />

单元格现在包含此格式€ 179,23的字符串。因此,如果你现在循环它,你将总是得到input string is....错误

通过使用OnRowDataBound事件,您可以添加源数据的值,而不是绑定到GridView的(格式化)数据。

decimal sum = 0;
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView row = e.Row.DataItem as DataRowView;
        sum += Convert.ToDecimal(row["totalFee"]);

        TextBox1.Text = string.Format("{0:C2}", sum);
    }
}