Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winforms DataDridView的自定义文本列,带有下拉列表,但没有验证_Winforms_Datagridview - Fatal编程技术网

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

Winforms DataDridView的自定义文本列,带有下拉列表,但没有验证,winforms,datagridview,Winforms,Datagridview,DataGridViewComboBoxColumn实现了DropDownList功能,该功能根据列表中的值验证数据 我想实现一个自定义列,它的行为类似于具有下拉功能的组合框,不会根据列表验证数据 有没有一种方法可以创建一个自定义列: 继承自DataGridViewComboxColumn 将编辑控件的DropDownStyle属性更改为ComboBoxStyle.DropDown 对列表中的项目禁用单元格验证 有人有这种行为的示例代码吗?我尝试了几种解决方案,并决定使用标准文本框列并启用自

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

我想实现一个自定义列,它的行为类似于具有下拉功能的组合框,不会根据列表验证数据

有没有一种方法可以创建一个自定义列:

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

有人有这种行为的示例代码吗?

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

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

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;
    }
  }
}
在功能上,具有自动完成功能的文本框与具有下拉样式的组合框非常相似。在我的例子中,功能实际上更好


奇怪的是,您还可以在组合框上使用AutoComplete,这会导致同时出现两个下拉列表。这是一些用户体验

您可以实现自己的
组合框
列。您也可以简单地使用
文本框
自动完成功能。谢谢@RezaAghaei。(1) 我已经实现了基于DataGridViewTextBoxColumn的我自己的专栏和基于DataGridViewTextBoxCell的单元格。我重写EditType属性(在单元格中)并指定DataGridViewComboBoxEditingControl。我重写InitializeEdit控件以初始化组合框。(2) 如果我从DataGridViewComboxColumn继承,我会得到我不想要的验证。我还没弄明白怎么覆盖这个。(3) 我还发现了自动完成功能。事实上,它可能是我的应用程序的最佳解决方案(基于文本框而不是组合框)。