DataGridViewCombobox列中的AutoComplete有什么奇怪的行为?
我正在使用( EditingControlShowing
)事件在DataGridViewComboBox列中启用自动完成。
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control is DataGridViewComboBoxEditingControl) { ComboBox combo = (ComboBox)e.Control; ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown; ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems; ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; } }
但它有一个奇怪的行为,当我键入一些字符然后我离开单元格(Tab或右键),值没有改变。
但如果我重复一遍,价值就会改变。 从这里 ,您可以下载解释问题的源代码和(EXE)video。
你能帮助我让它正常工作吗?
看来,对于第一次进入combobox,选项卡不再触发值的提交。 不知道为什么会这样,但似乎处理CurrentCellDirtyStateChanged
并提交编辑修复它。
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e) { // You could also check here to see if the cell in question is the combobox if (dataGridView1.IsCurrentCellDirty) { dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit); } }
我这样解决了:
上述就是C#学习教程:DataGridViewCombobox列中的AutoComplete有什么奇怪的行为?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control is DataGridViewComboBoxEditingControl) { ComboBox combo = (ComboBox)e.Control; ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown; ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend; ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems; combo.Validated -= new EventHandler(combo_Validated); combo.Validated += new EventHandler(combo_Validated); } } public static object GetPropValue(object src, string propName) { if (src == null) return null; return src.GetType().GetProperty(propName).GetValue(src, null); } void combo_Validated(object sender, EventArgs e) { Object selectedItem = ((ComboBox)sender).SelectedItem; DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)dataGridView1.Columns[dataGridView1.CurrentCell.ColumnIndex]; if (!String.IsNullOrEmpty(col.ValueMember)) dataGridView1.CurrentCell.Value = GetPropValue(selectedItem, col.ValueMember); else dataGridView1.CurrentCell.Value = selectedItem; }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015357.html