如何处理组合框的 SelectedIndexChanged 事件



我有DataGridView它包含两ComboBox列。第二个ComboBox将根据第一个ComboBox中的所选值填充数据。

如何处理第一个ComboBoxSelectedIndexChanged事件。

如果我使用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);
    }
}

有关 DataGridView 问题的重要资源可以在此处找到:

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

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

如何处理 SelectedIndexChanged 事件?

有时,了解用户何时在 ComboBox 编辑控件中选择项会很有帮助。使用窗体上的组合框,您通常会处理 SelectedIndexChanged 事件。使用 DataGridViewComboBox,您可以使用 DataGridView.EditControlShow 事件执行相同的操作。下面的代码示例演示如何执行此操作。请注意,此示例还演示如何防止触发多个 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");
}

像这样将第二个下拉列表放在"更新"面板中

<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>

像这样为第一个下拉列表设置 AutoPostBack="true" 属性。

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

相关内容

  • 没有找到相关文章

最新更新