【问题标题】:Display an invalid default value in a DataGridViewComboBoxColumn在 DataGridViewComboBoxColumn 中显示无效的默认值
【发布时间】:2010-09-15 21:10:14
【问题描述】:

我在 Windows 应用程序的 DataGridView 中有一个 DataGridViewComboBoxColumn。用户可以在其他地方更改设置,以使 DataGridViewComboBoxColumn 中的选择可能无效。我需要保留/显示无效项目,同时仅在列表中保留可选择的有效项目。

如果不更正选择,则会引发异常:
DataGridViewComboBoxCell 值无效。

捕获并忽略该设置会将所选值还原为列表中的第一个有效项目。

有没有办法为 DataGridViewComboBoxColumn 提供一个值,这样它就不会出现在可选值​​列表中?

【问题讨论】:

  • 您熟悉 CellValidating 和 DataError 事件吗?后者可以替代 DataGridView 抛出的异常。
  • 我确实捕获了异常并忽略了它(不幸的是,这是一种常见的模式)并且值恢复了。如果你有建议,我会全神贯注……呃……眼睛?

标签: c# winforms datagridview combobox


【解决方案1】:

我找到了一个很奇怪的解决方案:

将 autosizecolumnmode 设置为 none...

这里是解释

http://www.kebabshopblues.co.uk/2007/03/24/more-on-that-datagridviewcombobox-error/

【讨论】:

    【解决方案2】:

    我将使用一个示例,下拉列表中的值是颜色,DataGridView 有一个你衣橱里的 t 恤列表。

    您是否尝试将无效颜色插入到绑定到 ComboBox 列的列表对象中?也许您可以在列表中插入一些内容,其键与您的无效颜色匹配但显示“(无效)”(或其他类似文本)。如果有人在您的初始绑定后尝试选择它,您必须响应 CellValidating 事件。

    如果无效颜色是通过更改应用程序中其他位置的查找来导致 DataGridView 的值(T 恤)不再有效,您有一些选择。也许您可以更改该逻辑以查找进入 T 恤列表的数据,并查看是否存在具有该颜色的任何现有 T 恤——然后提示用户说“您已停用红色,但您有红色T恤,你想做什么?”您可以停止停用 Red、更换 T 恤或删除 T 恤。

    如果无效颜色来自您无法控制的来源,您可以在用户尝试查看 T 恤列表时提示“红色不再是 T 恤的有效颜色,该怎么办?我们用红色 T 恤做什么?”

    我们的应用程序中有类似的约束。我们删除了组合框并改用了 CellValidating。

    【讨论】:

    • 感谢您的回复。调整您的示例,我们会跟踪过去 X 天的衬衫颜色和睡衣颜色。可以一次删除多种颜色/使其无效。我们目前只是将列表框重置为未选择状态,只能选择有效值。问题是用户不再知道在某些日子穿了哪种颜色(而如果我们可以显示无效条目,他们可以看到他们在第 6 天穿红色,在第 12 天穿蓝色),即使红色和蓝色不再有效。
    • 这方面的历史非常有趣。这是您业务逻辑的一部分吗?如果是这样,您也不希望他们改变历史,对吗?所以你确实有一个非常具有挑战性的问题。老实说,我认为使用自定义列会更好地解决问题。理想情况下,您可以访问某个日期的历史记录。然后,当显示组合框时,您可以仅显示在该日期处于活动状态的颜色。如果您无权访问历史记录,甚至不要显示组合框,特别是如果它是历史记录的话。
    • 这不是真正的历史,它只是适合这个例子。也许它是你想在这周剩下的时间里穿的衬衫。或者一个膳食计划,但你现在不能吃麦片或煎饼,因为牛奶已经变质了。长话短说:曾经有效的内容现在已被删除。为了重新规划新选项,理想情况下,您需要知道旧选项是什么来替换它们。由于这是针对业务应用程序,您需要知道旧值是 A,因此您可以将其替换为 C,另一个旧值是 B,因此您可以将其替换为 D,除了第 3 个实例,您还可以在其中想要C。
    【解决方案3】:

    大概您用于填充组合框的绑定数据源是只读的。如果是这样,为什么不暂时将无效值插入底层数据源。这样它仍然会显示。您可以添加一个临时列来标记无效项目,并且不允许用户将其保留为选中状态,然后在用户离开单元格时将其删除。我从来没有用 datagridview 做过这个,但是我们用不同的 3rd 方网格做了一些非常相似的事情。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-17
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      • 2016-06-28
      • 2016-12-10
      • 2013-04-06
      相关资源
      最近更新 更多