3
我在Windows窗体应用程序中有一个DataGridView。 DataGridView中有两个ComboBox列。在选择第一个ComboBox中的某个值时,我希望能够填充第二个ComboBox。下面是代码:Windows窗体DataGridView将SelectedIndexChanged事件附加到组合框中
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());
}
它工作得很好,如果我选择第一个组合框(DataGridView中的第一列)一定价值,但第一列值选择后,如果我再选择第二个组合框的一些值(DataGridView中的第二列)事件FirstComboSelectionChanged
也被触发(显示空值)!
看起来事件也会附带第二个ComboBox。
有什么办法可以防止这种情况发生?
这只是一个简单的错误,组合框被重新使用也能修改第2列。但是你从来没有退订的事件,因此它只是保持射击。您在分配之前通过显示格式化值来复杂化该错误。毫无疑问,有更好的方法来做到这一点,但你只显示错误的代码,没有提示你为什么需要这个事件处理程序。 –