【发布时间】:2013-07-16 18:40:59
【问题描述】:
我有 DataGridView,其中包含两个 ComboBox 列。
第二个ComboBox 将根据从第一个ComboBox 中选择的值填充数据。
如何处理第一个ComboBox 的SelectedIndexChanged 事件。
【问题讨论】:
标签: c# winforms datagridview combobox event-handling
我有 DataGridView,其中包含两个 ComboBox 列。
第二个ComboBox 将根据从第一个ComboBox 中选择的值填充数据。
如何处理第一个ComboBox 的SelectedIndexChanged 事件。
【问题讨论】:
标签: c# winforms datagridview combobox event-handling
如果我使用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 编辑控件中的项目会很有帮助。使用表单上的 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");
}
【讨论】:
cb_SelectedIndexChanged 中调用EndEdit 时如何不抛出错误?
像这样将第二个下拉列表放在更新面板中
<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">
【讨论】: