DataDridView的自定义文本列,带有DropDown列表,但没有验证

时间:2016-02-01 16:20:24

标签: winforms datagridview

DataGridViewComboBoxColumn实现DropDownList功能,该功能根据列表中的值验证数据。

我想实现一个自定义列,其行为类似于具有DropDown功能的ComboBox,它不会根据列表验证数据。

有没有办法创建一个自定义列:

  • 继承自DataGridViewComboBoxColumn
  • 将编辑控件的DropDownStyle属性更改为ComboBoxStyle.DropDown
  • 禁用针对列表中项目的单元格验证

是否有人有此行为的示例代码?

1 个答案:

答案 0 :(得分:0)

我尝试了多种解决方案,并决定使用标准文本框列并启用自动完成功能。我没有使用自定义列。

在初始化期间,我创建了一个包含下拉列表

元素的AutoCompleteStringCollection
private AutoCompleteStringCollection _SerialNumbers ;

我附加到EditingControlShowing事件,检查它是否是正确的列并启用自动完成。

private void dgvChannels_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  if ( dgvChannels.CurrentCell.OwningColumn == SerialNumber )
  {
    TextBox c = e.Control as TextBox;
    if (c != null)
    {
      c.AutoCompleteMode = AutoCompleteMode.Suggest;
      c.AutoCompleteCustomSource = _SerialNumbers;
      c.AutoCompleteSource = AutoCompleteSource.CustomSource;
    }
  }
}

在功能上,具有自动完成功能的文本框与具有DropDown样式的Combobox非常相似。就我而言,功能实际上更好。

奇怪的是,您还可以在ComboBox上使用AutoComplete,这可能会导致同时出现两个删除列表。这是一些用户体验!