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也会被解雇(显示空值)!!

似乎事件也附加了第二个组合框。

有什么办法可以防止吗?

Windows窗体DataGridView附加SelectedIndexChanged事件到组合框

这不是你的答案,但却是一个简单的解决方案。

您可以使用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());
        }
    }