我正在使用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
答案 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;
}
}