如何处理ComboBox的SelectedIndexChanged事件?

IBR*_*BRA 5 c# combobox datagridview event-handling winforms

我有DataGridViewComboBox列.第二个ComboBox将填充数据,具体取决于第一个选定的值ComboBox.

如何处理第一个SelectedIndexChanged事件ComboBox.

alg*_*eat 14

如果我使用EditingControlShowing事件然后cb_SelectedIndexChanged触发几次,即使用户选择组合框但不改变选择.

这对我有用:

private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex == comboboxColumn.Index && e.RowIndex >= 0) //check if combobox column
    {
        object selectedValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
    }
}

//changes must be committed as soon as the user changes the drop down box
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}
Run Code Online (Sandbox Code Playgroud)


UWS*_*tor 11

可以在此处找到DataGridView问题的绝佳资源:

http://www.windowsclient.net/Samples/Go%20To%20Market/DataGridView/DataGridView%20FAQ.doc

从那里开始如何处理选定的更改事件:

如何处理SelectedIndexChanged事件?

有时,了解用户何时在ComboBox编辑控件中选择了一个项目会很有帮助.使用表单上的ComboBox,您通常会处理SelectedIndexChanged事件.使用DataGridViewComboBox,您可以使用DataGridView.EditingControlShowing事件执行相同的操作.以下代码示例演示了如何执行此操作.请注意,该示例还演示了如何防止多个SelectedIndexChanged事件触发.

private void dataGridView1_EditingControlShowing(object sender, 
    DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox cb = e.Control as ComboBox;
    if (cb != null)
    {
        // first remove event handler to keep from attaching multiple:
        cb.SelectedIndexChanged -= new
        EventHandler(cb_SelectedIndexChanged);

        // now attach the event handler
        cb.SelectedIndexChanged += new 
        EventHandler(cb_SelectedIndexChanged);
    }
}

void cb_SelectedIndexChanged(object sender, EventArgs e)
{
    MessageBox.Show("Selected index changed");
}
Run Code Online (Sandbox Code Playgroud)