DataFilter 干扰 UltraCombo 上的 AutoComplete Inside UltraGrid
DataFilter Interferes with AutoComplete on UltraCombo Inside UltraGrid
我在 UltraGrid 中设置了一个 UltraCombo,自动完成设置为 "Suggest"。 UltraCombo 具有 "Name" 的 DisplayMember 和 "ID" 的 ValueMember。我发现,当我将 DataFilter 附加到 UltraCombo 时(我想让它在值为零时显示为空白),如果他们键入的数字恰好与 ID 匹配并且也以名称开头,它将执行自动完成,但基础值永远不会改变。因此,不会触发 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
您需要将 AutoCompleteMode 设置为网格列而不是 Ultracombo。当 UltraCombo 被设置为 EditorComponent 时,网格使用它的编辑器。如果在这种情况下将 AutoCompleteMode 设置为组合,它不会在网格中产生任何影响。
如果将 AutoCompleteMode 设置为网格的列,则不需要将 DataFilter 设置为组合。
原来这是 Infragistics 11.2 中的错误。我不确定他们在什么时候修复了它,但版本 15.2 不会发生这种情况。
我在 UltraGrid 中设置了一个 UltraCombo,自动完成设置为 "Suggest"。 UltraCombo 具有 "Name" 的 DisplayMember 和 "ID" 的 ValueMember。我发现,当我将 DataFilter 附加到 UltraCombo 时(我想让它在值为零时显示为空白),如果他们键入的数字恰好与 ID 匹配并且也以名称开头,它将执行自动完成,但基础值永远不会改变。因此,不会触发 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
您需要将 AutoCompleteMode 设置为网格列而不是 Ultracombo。当 UltraCombo 被设置为 EditorComponent 时,网格使用它的编辑器。如果在这种情况下将 AutoCompleteMode 设置为组合,它不会在网格中产生任何影响。 如果将 AutoCompleteMode 设置为网格的列,则不需要将 DataFilter 设置为组合。
原来这是 Infragistics 11.2 中的错误。我不确定他们在什么时候修复了它,但版本 15.2 不会发生这种情况。