我知道这是一个常见的问题,但是找不到任何令人满意的问题。我的gridview列值和代码和我想要求和的值的类型是十进制。我想总和总量值并显示在gridview列下面的文本框值第4列我要求和,它的类型是十进制
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();
}
答案 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);
}
}