允许输入值或自动完成

我正在C#/ VS2010中开发一个WinForms应用程序。 在两个地方,我需要将ComboBox绑定到数据表行项目(让我们调用表'updateTable')。 用户可以在这里输入任何文字。 但是,为了帮助用户,ComboBox列表由不同的表格填充(让我们称之为'lookupTable'),并使用SuggestAppend提供可能使用的值。

通过表单设计器设置以下值,我可以在自由组合框中完美地工作:

  • Databindings = updateTable fieldname
  • 数据源= lookupTableBindingSource
  • DisplayMember = lookupTable fieldname
  • ValueMember =
  • AutocompleteMode = SuggestAppend
  • AutoCompleteSource = ListItems
  • AutoCompleteCustomSource =(集合)
  • SelectedItem =(无)
  • SelectedValue =(无)
  • 我也需要通过DataGridView上的ComboBox以类似的方式实现此功能,并且无法使其工作。 我试过的是:

    通过表单设计器设置这些属性:

  • DataPropertyName = updateTable fieldname
  • DataSource = lookupTableBindingSource
  • DisplayMember = lookupTable fieldname
  • 项目(集合)
  • ValueMember =(无)
  • 通过代码,我还补充道:

        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

    上一篇: allow typed value OR autocomplete

    下一篇: Only select list items from combobox