我正在使用 C# 在 DataGridView 中显示一些数据,我希望它不允许您添加重复的键。现在,我的 DataGridview 非常简单,只有 2 列。一个称为“键”,另一个称为“值”。我想要的是当用户编辑或向 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
最佳答案
这可能是您的 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
,但该行会被删除!
关于c# - DataGridView 中没有重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815307/