Vb.net 是否有办法只允许Infrastics UltraWinGrid的列中存在唯一值?

Vb.net 是否有办法只允许Infrastics UltraWinGrid的列中存在唯一值?,vb.net,infragistics,ultrawingrid,Vb.net,Infragistics,Ultrawingrid,我使用的是一个带有一列下拉框的Infragistics UltraWinGrid。我不希望用户能够为该列中的多行选择相同的值。有没有一个简单(或者见鬼,我会满足于高级)的方法来做到这一点 我正在使用VB.NET -编辑- 我尝试在数据源上为下拉框设置过滤器。但当我这样做的时候,该列中其他框中的值开始消失(不是值本身,而是它们应该表示的描述,所以它没有读“信息”,而是说“1”)。列中的所有单元格都引用同一个组合框,因此,如果从数据源中筛选出其中一个单元格的值,则将其筛选出所有单元格 我目前正试图捕

我使用的是一个带有一列下拉框的Infragistics UltraWinGrid。我不希望用户能够为该列中的多行选择相同的值。有没有一个简单(或者见鬼,我会满足于高级)的方法来做到这一点

我正在使用VB.NET

-编辑-

我尝试在数据源上为下拉框设置过滤器。但当我这样做的时候,该列中其他框中的值开始消失(不是值本身,而是它们应该表示的描述,所以它没有读“信息”,而是说“1”)。列中的所有单元格都引用同一个组合框,因此,如果从数据源中筛选出其中一个单元格的值,则将其筛选出所有单元格


我目前正试图捕获CellChange事件,并对照当前使用的所有其他值进行检查。如果它已经被使用了,我会发布一条消息,说同样多,然后恢复到原来的值。但是,该值返回为以前保存的值,因此。。。没有帮助。正在查看是否可以使用“text”属性。

因为您使用的是Infrastics,所以您可以使用一个超级下拉列表,它绑定到一个DataTable(或类似的东西),您可以在保存要显示的值的列之外添加一个“Selected”列

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

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

解决了该问题:

诀窍是使用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

智能,但不清楚如何将以前选择的项目还原为零,用户在超级下拉列表中更改当前选择的项目。我已更新了答案,提供了一种清除选定标志的可能方法。想法不错。但当我尝试这样做时,该列中其他框中的值开始消失(不是值本身,而是它们应该表示的描述,因此它没有读取“信息”,而是说“1”)。一列中的所有单元格都引用同一个组合框,因此,如果你从数据源中筛选出一个值作为其中一个,那么你就可以筛选出所有单元格。你是否尝试过Brian Fallon在Infrastics论坛上发布的方法:正如@lee-m在其回答中所说的,尝试使用BeforeCellUpdate而不是CellChange。也许你可以回到以前的价值观。此外,如果您省略了移除项目部分,则可以使用lee-m的解决方案。当然,您需要检查是否在行的其他位置选择了该值。完成。这很有效。标记@lee-m的答案为已接受,因为这是他的想法!我会考虑,虽然我认为他的想法是重新过滤来源,这不是我所做的。我从他那里得到的唯一一件事@lee-m是使用BeforeCellUpdate而不是CellChange,这让我的解决方案更漂亮了。