DataGridView ComboBox 列将接受任何文本

2024-02-02

我想要一个列DataGridView使用一个ComboBoxStyle.DropDown样式组合框,用户可以在其中选择下拉列表中的条目之一,或键入任意文本。

目前,我正在使用来自这个答案 https://stackoverflow.com/a/30080684/我可以在组合框的文本框部分中自由键入内容,但如果我键入的内容不在下拉列表中,则它不会提交回数据源,并且字段将恢复为原始选择。此外,如果我以编程方式将文本设置为不在下拉列表中的内容,我会得到一个DataError事件“DataGridViewComboBoxCell 值无效。”

我正在使用数据绑定;这DataGridView本身绑定到一个BindingList<T>.

Unlike 这个问题 https://stackoverflow.com/questions/36679164/我不希望将自由文本添加到下拉列表中。

需要明确的是,列数据类型是string我不希望它针对 ComboBox 的下拉列表(或与此相关的任何其他内容)进行验证。

(我必须创建自己的自定义DataGridViewColumn后代,如所描述的如何:在 Windows 窗体 DataGridView 单元格中承载控件 https://msdn.microsoft.com/en-us/library/7tas5c80(v=vs.110).aspx?)


我找到了一个简单但冗长的答案。 (但我仍然想知道是否有办法用标准来做到这一点DataGridViewComboBoxColumn type.)

我按照中的方法如何:在 Windows 窗体 DataGridView 单元格中承载控件 https://msdn.microsoft.com/en-us/library/7tas5c80(v=vs.110).aspx。我的完整解决方案太长,无法在此处发布,但我可以总结更改以使其使用ComboBox而不是示例的DateTimePicker控制。

  1. 重命名三个类DropDownComboBoxColumn, DropDownComboBoxCell, and DropDownComboBoxEditingControl分别。

  2. Replace DateTime到处都有string.

  3. 添加属性public ComboBoxStyle DropDownStyle { get; set; } to DropDownComboBoxColumn允许调用代码设置下拉样式。

  4. 从中删除代码DropDownComboBoxCell构造函数。

  5. 从中删除代码DropDownComboBoxEditingControl构造函数。

  6. Make DropDownComboBoxEditingControl从获得ComboBox代替DateTimePicker.

  7. Replace OnValueChanged with OnTextChanged考虑到不同的命名ComboBox versus DateTimePicker.

  8. 使EditingControlFormattedValue继承的属性获取和设置Text财产(而不是Value)并且不需要解析。

  9. Make ApplyCellStyleToEditingControl set ForeColor and BackColor代替CalendarForeColor and CalendarMonthBackground.

  10. Make EditingControlWantsInputKey还声明 F4,因此可用于打开和关闭下拉菜单。

  11. 添加以下代码到PrepareEditingControlForEdit:

    DropDownComboBoxColumn col = _dataGridView.Columns[_dataGridView.CurrentCell.ColumnIndex] as DropDownComboBoxColumn;
    if (col == null)
    {
      throw new InvalidCastException("Must be in a DropDownComboBoxColumn");
    }
    DropDownStyle = col.DropDownStyle;
    // (If you don't explicitly set the Text then the current value is
    // always replaced with one from the drop-down list when edit begins.)
    Text = _dataGridView.CurrentCell.Value as string;
    SelectAll();
    

处理DataGridView's EditingControlShowing事件如哦明智的 https://stackoverflow.com/a/30080684回答相关问题以设置下拉项,如果需要,还可以设置自动完成模式:

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
  ComboBox box = e.Control as ComboBox;
  if (box != null)
  {
    box.AutoCompleteSource = AutoCompleteSource.ListItems;
    box.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    box.DataSource = _dropDownItems;
  }
}

如果您希望所有行都有相同的下拉项,那么您始终可以将此属性设为DropDownComboBoxColumn like DropDownStyle并将其设置为PrepareEditingControlForEdit以避免不得不处理EditingControlShowing.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataGridView ComboBox 列将接受任何文本 的相关文章

  • 使用具有现有访问令牌的 Google API .NET 客户端

    用例如下 移动应用程序正在通过 Google 对用户进行身份验证 并且在某些时候 我们需要将用户的视频发布到他的 YouTube 帐户 出于实际原因 实际发布应该由后端完成 已经存储在那里的大文件 由于用户已经通过应用程序的身份验证 因此应
  • 32 位应用程序的特征最大矩阵大小

    所以 我正在寻找Eigen http eigen tuxfamily org index php title Main Page当我尝试声明大于 10000x10000 的矩阵时 包崩溃 我需要声明一个像这样的矩阵 可靠地大约有 13000
  • C# 中的接口继承

    我试图解决我在编写应用程序时遇到的相当大的 对我来说 问题 请看这个 为了简单起见 我将尝试缩短代码 我有一个名为的根接口IRepository
  • 对齐 GridView 中的行值

    我需要在 asp net 3 5 中右对齐 gridview 列中的值 我怎样才能做到这一点
  • POCO HTTPSClientSession 发送请求时遇到问题 - 证书验证失败

    我正在尝试使用 POCO 库编写一个向服务器发出 HTTPS 请求的程序 出于测试目的 我正在连接到具有自签名证书的服务器 并且我希望允许客户端进行连接 为了允许这种情况发生 我尝试安装InvalidCertificateHandler这是
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 当前的 c++ 工作草案与当前标准有何不同

    通过搜索该标准的 PDF 版本 我最终找到了这个链接C 标准措辞草案 http www open std org jtc1 sc22 wg21 docs papers 2012 n3376 pdf从 2011 年开始 我意识到我可以购买最终
  • 即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

    我在 WSL Ubuntu 上使用 g 我使用 git 克隆了 GLFW 存储库 使用了ccmake命令配置并生成二进制文件 然后使用make在 build 目录中最终创建 a文件 我安装了所有OpenGL相关的库 usr ld 我不记得我
  • 如何重置捕获像素的值

    我正在尝试创建一个 C 函数 该函数返回屏幕截图位图中每四个像素的 R G 和 B 值 这是我的代码的一部分 for int ix 4 ix lt 1366 ix ix 4 x x 4 for int iy 3 iy lt 768 iy i
  • 在 C 中使用 GNU automake 中的解析器

    我是 GNU autotools 的新手 在我的项目中使用了 lex 和 yacc 解析器 将它们作为 makefile am 中的源代码会产生以下错误 配置 in AC CHECK PROGS YACC bison yacc none i
  • 获取 2 个数据集 c# 中的差异

    我正在编写一个简短的算法 它必须比较两个数据集 以便可以进一步处理两者之间的差异 我尝试通过合并这两个数据集并将结果更改放入新的数据集来实现此目标 我的方法如下所示 private DataSet ComputateDiff DataSet
  • 为什么拆箱枚举会产生奇怪的结果?

    考虑以下 Object box 5 int int int box int 5 int nullableInt box as int nullableInt 5 StringComparison enum StringComparison
  • strcmp 给出分段错误[重复]

    这个问题在这里已经有答案了 这是我的代码给出分段错误 include
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • Googletest:如何异步运行测试?

    考虑到一个包含数千个测试的大型项目 其中一些测试需要几分钟才能完成 如果按顺序执行 整套测试需要一个多小时才能完成 通过并行执行测试可以减少测试时间 据我所知 没有办法直接从 googletest mock 做到这一点 就像 async选项
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public

随机推荐

  • Actor 系统无响应:ThreadPoolExecutor 调度程序仅创建核心线程池,显然忽略最大线程池大小

    更新 我发现如果我设置ThreadPoolExecutor s核心池大小与最大池大小相同 29 个线程 但是 如果我将核心池大小设置为 11 最大池大小设置为 29 那么 Actor 系统只会创建 11 个线程 我该如何配置ActorSys
  • Laravel 服务提供商不受合同约束

    我有以下由服务提供商绑定的合同 接口 但是我收到以下错误 RouteDependencyResolverTrait php 第 81 行中的 ReflectionException 类 App Http Controllers Rocket
  • MongoDB/Mongoose 索引使查询更快还是更慢?

    我有一个这样的文章模型 var ArticleSchema new Schema type String title String content String hashtags String comments type Schema Ob
  • 无法推断概念中的占位符类型

    我正在尝试使用 GCC 8 中的 Concepts TS 复制标准 C 20 概念 以便我可以在标准库中提供它们之前使用它们 我主要复制粘贴最新草稿中的所有内容 然后遇到一个问题 include
  • 将 facebook sdk 链接到 android 项目

    在 Eclipse 中创建 Android 项目并导入 facebook sdk 后 我转到 Android 应用程序的属性 选择 android 并添加 facebook sdk 然后单击 确定 然后 当我再次进入属性时 它会针对该 fa
  • 如何在Python中读取XML头

    如何在 Python 3 中读取 XML 文档的标头 理想情况下 我会使用 defusedxml 模块作为文件指出它更安全 https docs python org 3 library xml html 但在这一点上 经过几个小时的尝试弄
  • MongoDB:将数组添加到现有数组中

    我正在尝试将 Instructors 数组添加到现有的 Camps 数组中 层次结构看起来像这样 owner email email protected cdn cgi l email protection password mypassw
  • 适用于 Mac 的 Python Winsound 等效项

    我想知道是否有与在 Mac 上播放 wav 文件相当的 winsound 最好是本地进口 谢谢 正如其他模块所说的功能一样 本机导入会在这里造成麻烦 我假设您知道如何安装模块 所以我不会详细介绍 这是一个选项 Pygame sudo pip
  • Apollo GraphQL 突变(对象参数)

    所以 我正在尝试设计我的 Apollo 服务器 我想创建一个以对象作为参数的突变 这是我的架构的一个片段 它以某种方式导致了问题 我认为它在语法上是正确的 但我遇到了这个错误 errors message 预期的输入类型 您必须将 INPU
  • 小数点四舍五入到最接近的第 10 位

    需要将我的答案四舍五入到最接近的第十位 double finalPrice everyMile 2 8 DecimalFormat fmt new DecimalFormat 0 00 this answerField setText fm
  • 在 postgresql 中的列上设置“NOT NULL”是否会提高性能?

    我知道这在 MySQL 中是个好主意 如果我没记错的话 在 MySQL 中它允许索引更有效地工作 Setting NOT NULL本身对性能没有影响 检查几个周期 无关紧要 但是您可以通过实际使用 NULL 而不是虚拟值来提高性能 根据数据
  • C:从 stdin 读取,直到按 Enter 两次

    考虑一个简单的程序 它必须从 stdin 获取 5 个数字的序列并打印它们的和 没有说明将采用多少行输入 但如果换行符被采用两次 或按两次 Enter 键 则程序必须终止 例如 Input 1 1 1 1 1 2 2 2 2 2 3 3 3
  • 上传更新设置问题

    我有一个运行良好的上传表单 但我想以编程方式更改设置 但出现错误 Uploadify 在 document ready 上启动 我尝试将 updateSettings 绑定到按钮单击 也在 document ready 中完成 我还尝试在
  • MySQL:从一列中选择包含值的多行

    我想找到具有 FORD 和 SILVER 且用户在值列中输入值 200 的汽车的 car id table cars id car id name value 1 1 MAKE FORD 2 1 CARLINE FIESTA 3 1 COL
  • 如何将动态大小的纹理数组与 glTexImage2D 一起使用?

    目前 我可以加载我创建的静态大小的纹理 在本例中为 512 x 512 此代码来自标题 define TEXTURE WIDTH 512 define TEXTURE HEIGHT 512 GLubyte textureArray TEXT
  • 用于特定服务的CPU利用率%的Windows命令[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有没有办法从 Windows 上的脚本获取特定服务的 CPU 利用率 我知道wmic cpu get LoadPercentage将给出整个系统的 C
  • 如何在更新链末尾触发触发器?

    我有几个使用触发器相互交互的表 并且我当前处理触发器执行的方式使用pg trigger depth lt 2这很丑 我真的希望最终的触发器只运行一次 并且在所有每行的事情发生之后最后运行 很遗憾 CONSTRAINT TRIGGERs ar
  • 低功耗蓝牙:Android Gatt 客户端连接到 Linux Gatt 服务器

    我尝试通过蓝牙低功耗 GATT 模式将 android 连接到 linux Bluez中有一个示例代码 btgatt server c http code metager de source xref linux bluetooth blu
  • 将数组的至少“N”个元素与条件列表相匹配

    我有以下场景 我的 mongo 收藏之一包含以下格式的文档 user test tracks artist A artist B artist N 我想提取所有曲目 其艺术家在给定的数组中arr 为此 我使用以下查询 效果很好 collec
  • DataGridView ComboBox 列将接受任何文本

    我想要一个列DataGridView使用一个ComboBoxStyle DropDown样式组合框 用户可以在其中选择下拉列表中的条目之一 或键入任意文本 目前 我正在使用来自这个答案 https stackoverflow com a 3