我需要连续获取两列的所有值并将其相乘并为每行添加两列的乘积
foreach (DataGridViewRow row in dataGridView2.Rows)
{
int currPrice = Convert.ToInt32(row.Cells[1].Value.ToString());
int currQuan = Convert.ToInt32(row.Cells[2].Value.ToString());
int newPrice = currPrice++;
int newQuan = currQuan++;
int newTotal = newPrice * newQuan;
textBox4.Text = newTotal.ToString();
}
它可以工作但只在选定的行中。
例如在datagrid中我有2行
第一行的价格是10,数量是20,所以我需要得到它的产品,并为另一行做同样的事情,一旦它完成所有行,它应该添加全部/得到总和
我的行数没有预先确定,所以它应该是动态的,我怎么想这样做?
答案 0 :(得分:0)
你的总变量不应该像
那样int total=0;
foreach (DataGridViewRow row in dataGridView2.Rows)
{
int currPrice = Convert.ToInt32(row.Cells[1].Value.ToString());
int currQuan = Convert.ToInt32(row.Cells[2].Value.ToString());
total += currPrice * currQuan ;
}
textBox4.Text = newTotal.ToString();
此外,我没有理解为什么你在这里使用后增量操作符
答案 1 :(得分:0)
你在每次迭代时重新创建变量(newTotal
除外,没什么大不了的,但它会让你的代码更慢)。尝试在循环外定义变量。
int currPrice, currQuan, newPrice, newQuan;
int newTotal = 0; //this needs to be initialized in case grid is empty.
foreach (DataGridViewRow row in dataGridView2.Rows)
{
currPrice = Convert.ToInt32(row.Cells[1].Value.ToString());
currQuan = Convert.ToInt32(row.Cells[2].Value.ToString());
// not sure why these are incremented prior to calculating the total
// maybe the total shoud use currPrice and currQuan, as suggested by jitender.
newPrice = ++currPrice;
newQuan = ++currQuan;
newTotal += newPrice * newQuan;
}
textBox4.Text = newTotal.ToString(); // Update the display after we do all the math
正如评论中所提到的,我从后增量更改为预增量,并使newTotal
成为真正的总和
答案 2 :(得分:0)
如果您喜欢LINQ,也可以在一行中完成,而无需使用显式循环。
textBox4.Text = dataGridView2.Rows.Cast<DataGridRow>().Sum(r =>
Convert.ToInt32(r.Cells[1].Value.ToString()) *
Convert.ToInt32(r.Cells[2].Value.ToString())).ToString();
您必须在此文件的顶部导入System.Linq
才能使上述代码生效。