DataGridView中没有重复项

时间:2013-04-04 15:21:15

标签: c# datagridview rows multiple-columns cells

我正在使用C#在DataGridView中显示一些数据,我希望它不允许你添加一个重复的键。现在,我的DataGridview非常简单,只有2列。一个叫做“Key”,另一个叫做“Value”。我想要的是,当用户编辑或向DataGridView添加新条目时,它会检查是否已存在重复并取消编辑/创建新行。这是我目前的代码:

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells[0].Value.Equals(dataGridView1.Rows[e.RowIndex].Cells[0].Value))
        {
            dataGridView1.Rows.Remove(dataGridView1.Rows[e.RowIndex]);
            break;
        }
    }

    refresh();
}

根本不起作用......有人可以告诉我应该怎么做吗?...谢谢!

编辑:我也在dataGridView1.Rows.Remove()调用中收到此错误 -

Operation is not valid because it results in a reentrant call to the  SetCurrentCellAddressCore function.

编辑:

DataGridView看起来像这样

Key     | Value 
----------------
blah    | something 
somekey | somevalue

3 个答案:

答案 0 :(得分:1)

可能是你的foreach循环,它不允许删除行。

尝试这样的事情:

private void dgv_CellEndEdit(object sender, DataGridViewCellEventArgs e) {
  for (int i = 0; i < DataGridView1.Rows.Count; i++) {
    DataGridViewRow row = DataGridView1.Rows[i];
    if (row.Cells[0].Value == DataGridView1.Rows[e.RowIndex].Cells[0].Value) {
      DataGridView1.Rows.RemoveAt(e.RowIndex);
      DataGridView1.FirstDisplayedScrollingRowIndex = i;
      return;
    }
  }
}

我不允许行编辑,所以我可能错了。

编辑:只需快速编辑即可。我将FirstDisplayedScrollingRowIndex设置为e.RowIndex,但该行刚刚被删除!

答案 1 :(得分:0)

我只是猜测,但我已经尝试过你的代码了,我发现了一个逻辑错误: 如果你调试它,你会看到使用foreach循环你需要点击你刚编辑的元素,这显然等于它自己。

我建议你将循环更改为for或检查行索引是否相同。

答案 2 :(得分:0)

尝试使用此代码,

protected void GV_RowCommand(object sender, GridViewCommandEventArgs e)
{
     DataTable dt1 = ViewState["dt"] as DataTable;
     if (e.CommandName == "Add")
     {
DataRow dr;
          dr = dt1.NewRow();
dr["DED_Id"] = Material_Id;
          dr["DED_Name"] = Material;
          dt1.Rows.Add(dr);
          dt1.AcceptChanges();
          ViewState["dt"] = dt1;
     }
}