使用 DataGridView Combobox 的 SelectionChangeCommitted 事件获取新值或索引
Posted
技术标签:
【中文标题】使用 DataGridView Combobox 的 SelectionChangeCommitted 事件获取新值或索引【英文标题】:Get the new value or index with SelectionChangeCommitted Event of DataGridView Combobox 【发布时间】:2011-11-11 07:22:36 【问题描述】:我使用 SelectionChangeCommitted 来捕获组合框选定索引更改时的事件,但我无法获取它的新值或索引。
private void ruleList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
if (e.Control is ComboBox)
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectionChangeCommitted += ruleListColumnComboSelectionChanged;
private void ruleListColumnComboSelectionChanged(object sender, EventArgs e)
string value = ruleList.CurrentCell.Value.ToString(); // just return the old value before the change
【问题讨论】:
【参考方案1】:您好尝试使用CommitEdit
关键字(CommitEdit
,MSDN 页面上也有一个示例)。将此添加到您的DataGridView
:
// This event handler manually raises the CellValueChanged event
// by calling the CommitEdit method.
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
EventArgs e)
if (dataGridView1.IsCurrentCellDirty)
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
然后您可以只监听CellValueChanged
,而不必尝试在底层编辑控件上注册 ComboBoxValueChanged 事件。
【讨论】:
【参考方案2】:您可以使用以下方法获取新值:
ComboBox comboBox = sender.Control as ComboBox;
MessageBox.Show(comboBox.Text);
【讨论】:
【参考方案3】:如果我理解得很好,您正在对组合框中的 SelectionChangeCommitted
事件做出反应,但试图通过网格获取值。对吗?
我的感觉是,通过这个SelectionChangeCommitted
事件,您可以直接从组合框中访问值,但还不能通过网格,因为它还没有提交。
【讨论】:
【参考方案4】:改进Killercam 的方法,您可以检查当前单元格是否为datagridviewcomboboxcell 并执行(在VB 中可以轻松转换为C#)
If TypeOf CType(sender, DataGridView).CurrentCell Is DataGridViewComboBoxCell Then
CType(sender, DataGridView).CommitEdit(DataGridViewDataErrorContexts.Commit)
CType(sender, DataGridView).EndEdit()
End If
为了完整性,我还添加了 EndEdit() 方法。
【讨论】:
以上是关于使用 DataGridView Combobox 的 SelectionChangeCommitted 事件获取新值或索引的主要内容,如果未能解决你的问题,请参考以下文章
Winform中DataGridView网格添加ComBoBox
WinForm控件之ComboBox,DataGridView
清除 DataGridView 中的 ComboBox 文本