【发布时间】:2015-11-08 14:42:19
【问题描述】:
我在 Windows 窗体应用程序中有一个 DataGridView。该 DataGridView 中有两个 ComboBox 列。在第一个 ComboBox 中选择一些值时,我希望能够填充第二个 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 也会被触发(显示空值)!!
似乎该事件也与第二个 ComboBox 相关联。
有什么办法可以防止吗?
【问题讨论】:
-
这只是一个简单的错误,组合框被重新用于编辑第 2 列。但是您从未取消订阅该事件,因此它一直在触发。您通过在分配之前显示格式化值来使错误更加复杂。毫无疑问,有更好的方法可以做到这一点,但您只显示了错误的代码,而没有任何提示您为什么需要此事件处理程序。
标签: c# winforms datagridview