0

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

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

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

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

4

2 回答 2

1

您可能已经想到了;但以防万一,如果你没有:

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

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

于 2013-07-25T03:06:13.823 回答
0

我有一个解决方案。

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

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

于 2013-08-01T21:56:25.763 回答