1

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

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

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

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

4

3 回答 3

1

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

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

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

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

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

于 2009-05-01T21:20:25.323 回答
1

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

将 autosizecolumnmode 设置为 none...

这是一个解释

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

于 2009-03-03T14:56:47.220 回答
0

Presumably your bound datasource to populate the combobox is read only. If so, why not just temporarily insert the invalid value into the underlying datasource. That way it would still be displayed. You could add a temporary column to flag invalid items and not allow the user to leave it selected and then delete it when the user navigated off of the cell. I've never done this with a datagridview but we did something very similar with a different 3rd party grid. Good Luck!

于 2009-09-17T10:37:39.307 回答