有没有办法只允许Infragistics UltraWinGrid列中的唯一值?

时间:2012-03-21 20:17:22

标签: vb.net infragistics ultrawingrid

我使用带有一列下拉框的Infragistics UltraWinGrid。我不希望用户能够为该列中的多行选择相同的值。是否有一个简单的(或者哎呀,我会为先进的解决方法)做到这一点?

我使用的是VB.NET

- 编辑 -

我尝试在下拉框的数据源上设置过滤器。但是当我这样做时,该列中其他框中的值开始消失(不是值本身,而是它们应该代表的描述,因此不是阅读"信息",它只是说& #34; 1&#34)。列中的所有单元格都指向同一个组合框,因此如果您从其中一个数据源中筛选出一个值,则会对其中的所有单元格进行筛选。

我目前正在尝试捕获CellChange事件并检查所有其他当前使用的值。如果它已经被使用过,我会提出一条消息,并将其恢复为旧值。但是,该值会以之前保存的值返回,因此......没有用。即将看看我是否可以使用"文本"属性。

2 个答案:

答案 0 :(得分:2)

由于您正在使用Infragistics,您可以使用绑定到DataTable(或类似的东西)的UltraDropDown,您可以添加" Selected"除了包含您要显示的值的列之外的列。

在选择每个值时(例如,通过AfterCellUpdateAfterCellListCloseUp),您可以更新"已选择的"该数据源中的列,并使用列过滤器仅显示尚未标记为已选中的项目。这样,当选择或删除项目时,下拉列表的内容将自动更新。

要从旧值清除所选标志,您可以使用BeforeCellUpdate事件访问单元格的当前值,然后使用该值清除绑定到UltraDropDown的数据源的查找国旗。

答案 1 :(得分:1)

解决了它:

诀窍是使用BeforeCellUpdate,其BeforeCellUpdateEventArgs具有“NewValue”和“Cancel”成员。我只是查看列中的所有项目,看看它们是否与新值匹配。如果有,我通知用户并取消操作。

就是这样。这是代码:

Private Sub myUltraWinGrid_BeforeCellUpdate(ByVal sender As Object, ByVal e As Infragistics.Win.UltraWinGrid.BeforeCellUpdateEventArgs) Handles myUltraWinGrid.BeforeCellUpdate
        If e.Cell.Column.Key = "myColumn" Then
            Dim newValue As Integer = CInt(e.NewValue)
            For Each row As Infragistics.Win.UltraWinGrid.UltraGridRow In myUltraWinGrid.Rows
                If row.Cells("myColumn") IsNot e.Cell _ 'So I'm not checking against the current cell
                    AndAlso CInt(row.Cells("myColumn").Value) = newValue Then
                    MsgBox("That value has already been used in this column")
                    e.Cancel = True
                End If
                Next
        End If
    End Sub