允许输入值或自动完成
我正在C#/ VS2010中开发一个WinForms应用程序。 在两个地方,我需要将ComboBox绑定到数据表行项目(让我们调用表'updateTable')。 用户可以在这里输入任何文字。 但是,为了帮助用户,ComboBox列表由不同的表格填充(让我们称之为'lookupTable'),并使用SuggestAppend提供可能使用的值。
通过表单设计器设置以下值,我可以在自由组合框中完美地工作:
我也需要通过DataGridView上的ComboBox以类似的方式实现此功能,并且无法使其工作。 我试过的是:
通过表单设计器设置这些属性:
通过代码,我还补充道:
private void identitiesDataGridView_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;
combo.Validated -= new EventHandler(combo_Validated);
}
}
void combo_Validated(object sender, EventArgs e)
{
Object selectedItem = ((ComboBox)sender).SelectedItem;
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn)identitiesDataGridView.Columns[identitiesDataGridView.CurrentCell.ColumnIndex];
if (!String.IsNullOrEmpty(col.ValueMember))
identitiesDataGridView.CurrentCell.Value = GetPropValue(selectedItem, col.ValueMember);
else
identitiesDataGridView.CurrentCell.Value = selectedItem;
}
public static object GetPropValue(object src, string propName)
{
if (src == null)
return null;
return src.GetType().GetProperty(propName).GetValue(src, null);
}
private void identitiesDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (identitiesDataGridView.IsCurrentCellDirty)
{
identitiesDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
这是a)当表单启动时给我错误,因为在lookupTable中找不到一些updateTable值,以及b)在编辑时不允许我选择除lookupTable值之外的任何其他值。
任何想法如何我可以实现这个“键入你喜欢的,但这里有一些建议”在数据网格中的效果?
链接地址: http://www.djcxy.com/p/60905.html