2016-03-03 3 views
1

J'ai un ensemble UltraCombo dans un UltraGrid, avec la saisie semi-automatique paramétrée sur "Suggérer". L'UltraCombo a un DisplayMember de "Name" et un ValueMember de "ID". Ce que j'ai trouvé est que quand j'attache un DataFilter à l'UltraCombo (je voudrais le faire apparaître vide quand la valeur est zéro), s'ils tapent un chiffre qui se trouve pour correspondre à un ID et commence aussi un nom, il fera la saisie semi-automatique, mais la valeur sous-jacente n'est jamais modifiée. Donc, aucune AfterUpdate ou CellChange n'est déclenchée, et lorsque vous quittez la cellule, elle revient à vide. Comment puis-je faire fonctionner la saisie semi-automatique et afficher la valeur zéro comme vide? Voici mon code (Notez, si vous commentez la ligne où UltraCombo1.DataFilter est définie, les mises à jour fonctionnent très bien, mais vous perdez le DataFiltering):DataFilter interfère avec la saisie semi-automatique sur UltraCombo Inside UltraGrid

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 

Répondre

0

Il s'avère que c'était un bug dans Infragistics 11.2. Je ne suis pas sûr à quel point ils l'ont corrigé, mais cela n'arrive pas avec la version 15.2.

1

Vous devez définir AutoCompleteMode à la colonne de la grille et non à la Ultracombo. Lorsque UltraCombo est défini en tant que EditorComponent, la grille utilise son éditeur. Si vous définissez AutoCompleteMode sur le combo dans cette situation, il n'a aucun effet dans la grille. Si vous définissez AutoCompleteMode sur la colonne de la grille, vous n'aurez pas besoin de définir DataFilter sur la liste déroulante.