gpt4 book ai didi

c# - CurrentCellDirtyStateChanged 触发两次

转载 作者:行者123 更新时间:2023-11-30 22:51:22 25 4
gpt4 key购买 nike

我有一个 datagridview,其中一行是组合框,我在该 datagridview 中有一列(“注释”),每当我更改标题时我都会更新它,即每当我更改组合框中的值时,字段“注释”由该行和列的值填充。

我使用事件 CurrentCellDirtyStateChanged 来捕捉它,但问题是事件被触发了两次,导致字段“Notes”中连接的值重复。

我该如何解决。

我的代码示例:

private void dataGridViewReader_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{


string columnName = dataGridViewReader.CurrentCell.OwningColumn.Name;
dataGridViewReader.CommitEdit(DataGridViewDataErrorContexts.Commit);
string columnName2 = dataGridViewReader.CurrentCell.Value.ToString();

if (columnName2 == "Notes")
{
for (int rows = 1; rows < dataGridViewReader.Rows.Count; rows++)
{
if (!string.IsNullOrEmpty(dataGridViewReader.Rows[rows].Cells[dataGridViewReader.CurrentCell.ColumnIndex].Value.ToString()))
{
dataGridViewReader.Rows[rows].Cells[0].Value += dataGridViewReader.Rows[rows].Cells[dataGridViewReader.CurrentCell.ColumnIndex].Value + @"<br/>";
}

}
}


DataGridViewComboBoxCell dgvcbc = (DataGridViewComboBoxCell)dataGridViewReader.Rows[0].Cells[dataGridViewReader.CurrentCell.ColumnIndex];
dgvcbc.Style.ForeColor = Color.DarkGreen;

}

最佳答案

双发的原因是cell dirty state先ON后OFF,都导致cell状态随之改变。

这是解决方案:在放置代码的地方添加 CellValueChanged 事件处理程序:

private void dataGridViewReader_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
string columnName = dataGridViewReader.CurrentCell.OwningColumn.Name;
string columnName2 = dataGridViewReader.CurrentCell.Value.ToString();

if (columnName2 == "Notes")
{
for (int rows = 1; rows < dataGridViewReader.Rows.Count; rows++)
{
if (!string.IsNullOrEmpty(dataGridViewReader.Rows[rows].Cells[dataGridViewReader.CurrentCell.ColumnIndex].Value.ToString()))
{
dataGridViewReader.Rows[rows].Cells[0].Value += dataGridViewReader.Rows[rows].Cells[dataGridViewReader.CurrentCell.ColumnIndex].Value + @"<br/>";
}
}
}

DataGridViewComboBoxCell dgvcbc = (DataGridViewComboBoxCell)dataGridViewReader.Rows[0].Cells[dataGridViewReader.CurrentCell.ColumnIndex];
dgvcbc.Style.ForeColor = Color.DarkGreen;
}

当前的CurrentCellDirtyStateChanged处理程序通过以下简单代码更改:

private void dataGridViewReader_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridViewReader.IsCurrentCellDirty)
dataGridViewReader.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

这应该使您的基本代码运行一次:当用户使单元格变脏时(当嵌入式组合框更改其值时)。

关于c# - CurrentCellDirtyStateChanged 触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59266685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com