C#DataGridView如何通过循环获取所有行值?

时间:2017-09-19 03:30:47

标签: c# loops for-loop datagridview foreach

我需要连续获取两列的所有值并将其相乘并为每行添加两列的乘积

 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,所以我需要得到它的产品,并为另一行做同样的事情,一旦它完成所有行,它应该添加全部/得到总和

我的行数没有预先确定,所以它应该是动态的,我怎么想这样做?

3 个答案:

答案 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才能使上述代码生效。