Windows窗体DataGridView附加SelectedIndexChanged事件到组合框
本文关键字:组合 事件 SelectedIndexChanged 窗体 DataGridView 附加 Windows | 更新日期: 2023-09-27 18:08:17
我有一个DataGridView在Windows窗体应用程序。DataGridView中有两个ComboBox列。在第一个组合框中选择一些值,我希望能够填充第二个组合框。下面是代码:
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
try
{
if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox)
{
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectedIndexChanged -= FirstComboSelectionChanged;
comboBox.SelectedIndexChanged += FirstComboSelectionChanged;
}
}
catch (Exception ex)
{
}
}
private void FirstComboSelectionChanged(object sender, EventArgs e)
{
var sendingCB = sender as DataGridViewComboBoxEditingControl;
MessageBox.Show(sendingCB.EditingControlFormattedValue.ToString());
}
如果我从第一个ComboBox (DataGridView的第一列)选择一些值,但在第一列值选择之后,如果我从第二个ComboBox (DataGridView的第二列)选择一些值,事件FirstComboSelectionChanged
也会被解雇(显示空值)!!
似乎事件也附加了第二个组合框。
有什么办法可以防止吗?
这不是你的答案,但却是一个简单的解决方案。
您可以使用dataGridView1_CurrentCellDirtyStateChanged
事件代替comboBox.SelectedIndexChanged
事件,如下所示:
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
if (dataGridView1.CurrentCell.ColumnIndex == 0)
MessageBox.Show(dataGridView1.CurrentCell.EditedFormattedValue.ToString());
}
}