代码之家  ›  专栏  ›  技术社区  ›  BCarpe

数据过滤器干扰UltraGrid内部UltraCombo上的自动完成

  •  1
  • BCarpe  · 技术社区  · 8 年前

    我在UltraGrid中设置了一个UltraCombo,AutoComplete设置为“建议”。UltraCombo具有“Name”的DisplayMember和“ID”的ValueMember。我发现,当我将DataFilter附加到UltraCombo时(我想在值为零时使其显示为空),如果他们键入的数字恰好与ID匹配,并且还以Name开头,它将自动完成,但底层值从未更改。因此,不会触发AfterUpdate或CellChange,当您离开单元格时,它将变为空白。如何让“自动完成”工作,但仍将零值显示为空白?以下是我的代码(注意,如果您注释掉设置UltraCombo1.DataFilter的行,更新可以正常工作,但您会丢失DataFiltering):

    Imports Infragistics.Win.UltraWinGrid
    Imports Infragistics.Win
    
    Public Class Form1
    
        Public Sub New()
            InitializeComponent()
            Dim datatableCombo = New DataTable
            datatableCombo.Columns.Add("ID", GetType(Integer))
            datatableCombo.Columns.Add("Name", GetType(String))
            datatableCombo.Rows.Add({1, "123"})
            datatableCombo.Rows.Add({2, "234"})
            datatableCombo.Rows.Add({3, "456"})
    
            UltraCombo1.DataFilter = New MyDataFilter()
            UltraCombo1.DataSource = datatableCombo
            UltraCombo1.ValueMember = "ID"
            UltraCombo1.DisplayMember = "Name"
    
            Dim position As Integer = 0
            UltraCombo1.DisplayLayout.Bands(0).Columns("ID").Hidden = False
            UltraCombo1.DisplayLayout.Bands(0).Columns("ID").Header.VisiblePosition = position
            position += 1
            UltraCombo1.DisplayLayout.Bands(0).Columns("Name").Hidden = False
            UltraCombo1.DisplayLayout.Bands(0).Columns("Name").Header.VisiblePosition = position
            position += 1
    
            Dim datatableGrid = New DataTable
            datatableGrid.Columns.Add("ID", GetType(Integer))
            datatableGrid.Columns.Add("Name", GetType(String))
            UltraGrid1.DataSource = datatableGrid
    
            UltraGrid1.DisplayLayout.GroupByBox.Hidden = True
            UltraGrid1.DisplayLayout.Override.RowSelectors = DefaultableBoolean.True
            UltraGrid1.DisplayLayout.Override.AllowAddNew = AllowAddNew.TemplateOnBottom
    
            UltraGrid1.DisplayLayout.Bands(0).Columns("ID").EditorComponent = UltraCombo1
            UltraGrid1.DisplayLayout.Bands(0).Columns("ID").CellClickAction = CellClickAction.EditAndSelectText
            UltraGrid1.DisplayLayout.Bands(0).Columns("ID").Style = ColumnStyle.DropDownValidate
        End Sub
    
        Public Class MyDataFilter
            Implements Infragistics.Win.IEditorDataFilter
    
            Public Function Convert(ByVal convertArgs As Infragistics.Win.EditorDataFilterConvertArgs) As Object Implements Infragistics.Win.IEditorDataFilter.Convert
                ' Shouldn't affect anything?
                convertArgs.Handled = False
                Return Nothing
            End Function
        End Class
    
    End Class
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   wnvko    8 年前

    您需要将AutoCompleteMode设置为网格列,而不是Ultracombo。当UltraCombo设置为EditorComponent时,网格使用其编辑器。如果在这种情况下将AutoCompleteMode设置为组合,它在网格中不会产生任何效果。 如果将AutoCompleteMode设置为网格的列,则不需要将DataFilter设置为组合。

        2
  •  0
  •   BCarpe    8 年前

    事实证明,这是Infragistics 11.2中的一个错误。我不确定他们在什么时候修复了它,但在15.2版本中不会发生这种情况。