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

无人久伴 提交于 2019-11-29 10:55:42

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

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

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