How to handle SelectedIndexChanged event for a ComboBox? [duplicate]

依然范特西╮ 提交于 2019-11-28 04:21:34

问题


I have DataGridView which contains two ComboBox columns. The second ComboBox will be filled with data depending on the selected value from first ComboBox.

How to handle the SelectedIndexChanged event for the first ComboBox.


回答1:


A great resource for DataGridView questions can be found here:

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

From there on how to handle a selected change event:

How do I handle the SelectedIndexChanged event?

Sometimes it is helpful to know when a user has selected an item in the ComboBox editing control. With a ComboBox on your form you would normally handle the SelectedIndexChanged event. With the DataGridViewComboBox you can do the same thing by using the DataGridView.EditingControlShowing event. The following code example demonstrates how to do this. Note that the sample also demonstrates how to keep multiple SelectedIndexChanged events from firing.

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");
}



回答2:


If I use EditingControlShowing event then cb_SelectedIndexChanged fires several times, even when user selects combobox but doesn't change selection.

This works for me:

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);
    }
}



回答3:


Place the second dropdownlist in Update panel like this

<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline">
                 <ContentTemplate>
                 <asp:DropDownList ID="ddl2" runat="server" >                  
                </ContentTemplate>
                <Triggers>
                <asp:AsyncPostBackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" />
                </Triggers>
                </asp:UpdatePanel>

set AutoPostBack="true" property for first dropdownlist like this.

<asp:DropDownList ID="ddl1" runat="server" AutoPostBack="true"  
                        OnSelectedIndexChanged="ddl1_SelectedIndexChanged">


来源:https://stackoverflow.com/questions/11950189/how-to-handle-selectedindexchanged-event-for-a-combobox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!