【问题标题】:How to make a combobox column show only unselected items?如何使组合框列仅显示未选中的项目?
【发布时间】:2013-07-25 02:04:05
【问题描述】:

这应该是一个非常常见的工作流程,所以我很惊讶 C# gridview 或 DevExpress 都没有提供简单的方法来完成它。

示例:
MyColumn 是组合框类型列的字段。当用户尝试编辑此字段中的值时,他必须在下拉列表中选择一个值。当网格有 1 行时,他可以选择“值 A”、“值 B”或“值 C”。如果用户在第一行选择了“值 A”,那么在第二行中,MyColumn 的可用值将变为“值 B”和“值 C”。

目前我正在使用 DevExpress 以一种肮脏的方式进行操作,每次删除、插入或修改操作后,我都会计算组合框存储库(修改 RepositoryItemComboBox.Items 属性),并在 CustomRowCellEdit 事件处理程序中将更新的存储库分配给列。代码非常复杂和脆弱。

--更新------ 我刚刚想出了一个更好的用例示例: 假设网格要求用户选择他最喜欢的 5 个美国州。所以 State 列是一个组合框类型的列,最初有一个包含 50 个状态的列表。如果用户在第一行选择 CA,那么在第二行他将只有 49 个状态可供选择。在这种情况下,您总是希望每行中的值都是唯一的,否则就没有意义了。

【问题讨论】:

  • 简单来说,您希望组合框的值对每一行都是唯一的吗?
  • 创建一个类,将您填充到组合框中的项目。所以你的组合框得到一个 List。例如,在您的类中,您定义了一个键和值成员以及一个属性“状态”。这可能是一个布尔标志。组合框始终显示所有状态 = true 的项目。因此,每个组合框都会在数据源处获取 List ,如果您进行更改,您只需更改状态。也许这适用于您的情况。
  • 致 Gian Acuna:是的,我愿意。对不起,如果我不清楚
  • 致 Sebi:现在存储库没有绑定到数据源,但它的项目列表在运行时以编程方式添加或删除。我会看看你的方法是否可行。
  • Sebi,我认为 DevExpress 不支持这一点:“组合框始终显示所有状态为 true 的项目。”或者,也许我没有找到它。你能给出更具体的指导吗?谢谢。

标签: c# gridview combobox devexpress


【解决方案1】:

你可能已经想到了;但以防万一:

我相信,与其每次都尝试更改存储库,不如实际验证组合中的选定值(在组合框的 onchange 事件中)并覆盖用户对此项目的选择,以防它重复。

注意:另外,我认为更改存储库会有自己的问题;因为在每次删除、插入或修改后更改数据源会改变其他组合框中的数据(显然,这里我假设所有组合使用相同的数据源)。

【讨论】:

  • 谢谢。现在它没有绑定到数据源,但确实存在一些问题。每当修改存储库时,CustomRowCellEdit 都会触发并导致一些古怪的行为
【解决方案2】:

我有办法。

处理 CustomRowCellEditForEditing 事件。在处理程序中,遍历所有行并获取所有选定项,然后从 repositoryItemComboBox1.Items 中删除选定项(假设这是您的列编辑器)。
当然,逻辑要复杂一些,因为当用户编辑或删除一行时,您还必须更改 Items 集合。

警告:
CustomRowCellEdit 是错误的方法。因为每次 RepositoryItemComboBox.Items 更改时,都会触发该事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多