如何使组合框列只显示选定的项目?

时间:2013-07-25 02:04:06

标签: c# gridview combobox devexpress

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

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

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

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

2 个答案:

答案 0 :(得分:1)

你可能已经想到了它;但万一你还没有:

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

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

答案 1 :(得分:0)

我有一个解决方案。

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

<强>注意:
CustomRowCellEdit是错误的方法。因为每次更改RepositoryItemComboBox.Items时都会触发事件。

相关问题