如何检查GridView上每行的列值是否相同?

时间:2014-03-19 20:31:09

标签: c# winforms if-statement

我有一个10行的网格视图。

点击按钮后,我想检查并确保firstname列的gridview列下的每个单元格值相同或不相同。

如果所有单元格值相同,则调用changeCellValues()方法。如果任何单元格值不同,则MessageBox.Show("You cant use your method");

private void button1_Click(object sender, EventArgs e)
{ 
    string x;
    string y;

    x = dataGridView1.Rows[0].Cells[1].Value.ToString();

    for (int i = 0; i < 11; i++)
    {
        y = dataGridView1.Rows[i].Cells[1].Value.ToString();
        if (x == y) continue;
        MessageBox.Show("You cant use your method");
    }
}

如何检查GridView上每一行的列值是否相同?

2 个答案:

答案 0 :(得分:2)

如果您有10行,请将i < 11更改为i < 10并从i开始1,因为您已获得第一行的值并将其存储到x。你的方式似乎是正确的,但不是在循环中显示消息框,你可以使用这样的东西:

x = dataGridView1.Rows[0].Cells[1].Value.ToString();
bool control = true;
for (int i = 1; i < 10; i++)
{
   y = dataGridView1.Rows[i].Cells[1].Value.ToString();
   if (x != y) { control = false; break; }
}

if(!control)  MessageBox.Show("You cant use your method");
else changeCellValues();

答案 1 :(得分:0)

替代使用LINQ ...抓取“firstname”列中的所有内容,使用Distinct删除重复项,然后计算唯一名称的数量。 (如果您有多个唯一名称,则它们不尽相同。)

var isSameName = dataGridView1.Rows.Cast<DataGridViewRow>()
                              .Select(x => Convert.ToString(x.Cells["firstname"].Value))
                              .Distinct().Count() == 1;

if (!isSameName)
{
    MessageBox.Show("You cant use your method");
    return;
}

changeCellValues();