BAT FILTERING

7 posts, 0 answers
  1. Javier
    Javier avatar
    11 posts
    Member since:
    May 2014

    Posted 11 Jul Link to this post

    Regrads.

     

    In my proyect i'm using a MultiColumnComboBox control with data Source, but the table have very much information.  In the moment when user is writing the  MultiColumnComboBox begin filtering, but  this teke several time to search the data. i use the next code to filter: (vb.net)

     

     Sub conf_combo_pacientes()
            Me.tb_identificacion.AutoFilter = True
            Me.tb_identificacion.DisplayMember = "Identificación"

            Dim filter As New FilterDescriptor()
            filter.PropertyName = Me.tb_identificacion.DisplayMember
            filter.[Operator] = FilterOperator.Contains
            Me.tb_identificacion.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
            tb_identificacion.MultiColumnComboBoxElement.EditorControl.EnableCustomFiltering = True
            AddHandler tb_identificacion.MultiColumnComboBoxElement.EditorControl.CustomFiltering, AddressOf EditorControl_CustomFilteringrl
            AddHandler tb_identificacion.KeyDown, AddressOf TB_CEDULA_RL_KeyDown

            tb_identificacion.DropDownSizingMode = SizingMode.UpDownAndRightBottom
            tb_identificacion.AutoSizeDropDownToBestFit = True

        End Sub

     

    Private Sub EditorControl_CustomFilteringrl(sender As Object, e As Telerik.WinControls.UI.GridViewCustomFilteringEventArgs)
            Dim element As RadMultiColumnComboBoxElement = tb_identificacion.MultiColumnComboBoxElement

            Dim textToSearch As String = tb_identificacion.Text
            If AutoCompleteMode.Append = (element.AutoCompleteMode And AutoCompleteMode.Append) Then
                If element.SelectionLength > 0 AndAlso element.SelectionStart > 0 Then
                    textToSearch = tb_identificacion.Text.Substring(0, element.SelectionStart)
                End If
            End If
            If String.IsNullOrEmpty(textToSearch) Then
                e.Visible = True
                For i As Integer = 0 To element.EditorControl.ColumnCount - 1
                    e.Row.Cells(i).Style.Reset()
                Next
                e.Row.InvalidateRow()
                Return
            End If
            e.Visible = False
            For i As Integer = 0 To element.EditorControl.ColumnCount - 1
                Dim text As String = e.Row.Cells(i).Value.ToString()
                If text.IndexOf(textToSearch, 0, StringComparison.InvariantCultureIgnoreCase) >= 0 Then
                    e.Visible = True
                    e.Row.Cells(i).Style.CustomizeFill = True
                    e.Row.Cells(i).Style.DrawFill = True
                    e.Row.Cells(i).Style.BackColor = Color.FromArgb(201, 252, 254)
                Else
                    e.Row.Cells(i).Style.Reset()
                End If
            Next
            e.Row.InvalidateRow()
        End Sub

        Private Sub tb_identificacion_KeyDown(sender As Object, e As KeyEventArgs) Handles tb_identificacion.KeyDown
            Try
                If e.KeyCode = System.Windows.Forms.Keys.Enter Then
                    If Me.tb_identificacion.ValueMember <> "" Then
                        tb_identificacion.SelectedValue = tb_identificacion.EditorControl.CurrentRow.Cells(tb_identificacion.ValueMember).Value
                    Else
                        tb_identificacion.SelectedValue = tb_identificacion.EditorControl.CurrentRow.Cells(tb_identificacion.DisplayMember).Value
                    End If

                    tb_identificacion.Text = tb_identificacion.EditorControl.CurrentRow.Cells(tb_identificacion.DisplayMember).Value.ToString()
                    tb_identificacion.MultiColumnComboBoxElement.ClosePopup()
                    tb_identificacion.MultiColumnComboBoxElement.TextBoxElement.TextBoxItem.SelectAll()
                End If
            Catch ex As Exception

            End Try
        End Sub

    While the user is writing, then control is filtering but I do not want it so, i woluld like that the user to write but when user press key intro, in this moment the multiColumnComboBox  is filtering. But i don't know do it.

     

     

  2. Dimitar
    Admin
    Dimitar avatar
    1404 posts

    Posted 12 Jul Link to this post

    Hi Javier,

    Thank you for writing.

    The Enter key is used for selecting an item and it closes the drop down. To improve the performance in this case you can enable the filtering after a particular number of characters are entered. For example:
    Private Sub RadGridView1_CellEditorInitialized(ByVal sender As Object, ByVal e As GridViewCellEventArgs)
        Dim editor = TryCast(e.ActiveEditor, RadMultiColumnComboBoxElement)
        If editor IsNot Nothing Then
            editor.AutoFilter = True
            editor.EditorControl.FilterDescriptors.Add("Name", Telerik.WinControls.Data.FilterOperator.Contains, "")
          
            AddHandler editor.TextChanged, AddressOf Editor_TextChanged
        End If
    End Sub
     
    Private Sub Editor_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim editor = DirectCast(sender, RadMultiColumnComboBoxElement)
        If editor.Text.Length >= 5 AndAlso editor.EditorControl.FilterDescriptors.Count = 0 Then
            editor.AutoFilter = True
            Dim filter As New FilterDescriptor()
            filter.PropertyName = editor.DisplayMember
            filter.Operator = FilterOperator.Contains
            editor.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
     
        Else
            editor.AutoFilter = False
            editor.EditorControl.MasterTemplate.FilterDescriptors.Clear()
        End If
    End Sub

    Is this approach suitable for your scenario?

    I am looking forward to your reply.

    Regards,
    Dimitar
    Telerik by Progress
    Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
  3. UI for WinForms is Visual Studio 2017 Ready
  4. Javier
    Javier avatar
    11 posts
    Member since:
    May 2014

    Posted 12 Jul in reply to Dimitar Link to this post

    Regards, thanks for you reply.

     

    In this moment my MultiColumnComboBox have 3 columns (id, name, gender),

     

    i paste your code,  but in the line:  editor.EditorControl.FilterDescriptors.Add("Paciente",Telerik.WinControls.Data.FilterOperator.Contains, "")

    I changed for the my column name. "Name" to "Paciente"

     

    But it does not work, the control not filter. I deleted my code before

     

     

    I deleted my code before
    I deleted my code before
    I deleted my code before
  5. Javier
    Javier avatar
    11 posts
    Member since:
    May 2014

    Posted 12 Jul in reply to Javier Link to this post

    Control no filter
  6. Dimitar
    Admin
    Dimitar avatar
    1404 posts

    Posted 13 Jul Link to this post

    Hi Javier,

    You need to use one of the column names (not the header text) for this value. In your code this is set to the display member:
    filter.PropertyName = Me.tb_identificacion.DisplayMember

    I hope this helps. Should you have any other questions do not hesitate to ask.

    Regards,
    Dimitar
    Telerik by Progress
    Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
  7. Javier
    Javier avatar
    11 posts
    Member since:
    May 2014

    Posted 13 Jul in reply to Dimitar Link to this post

    Regrads

     

    i pasted this code:

     

      Private Sub RadGridView1_CellEditorInitialized(ByVal sender As Object, ByVal e As GridViewCellEventArgs)
            Dim editor = TryCast(e.ActiveEditor, RadMultiColumnComboBoxElement)
            If editor IsNot Nothing Then
                editor.AutoFilter = True
                editor.EditorControl.FilterDescriptors.Add((1), Telerik.WinControls.Data.FilterOperator.Contains, "")
                AddHandler editor.TextChanged, AddressOf Editor_TextChanged
            End If
        End Sub

        Private Sub Editor_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
            Dim editor = DirectCast(sender, RadMultiColumnComboBoxElement)
            If editor.Text.Length >= 5 AndAlso editor.EditorControl.FilterDescriptors.Count = 0 Then
                editor.AutoFilter = True
                Dim filter As New FilterDescriptor()
                filter.PropertyName = editor.DisplayMember
                filter.Operator = FilterOperator.Contains
                editor.EditorControl.MasterTemplate.FilterDescriptors.Add(filter)
                filter.PropertyName = Me.tb_identificacion.DisplayMember
            Else
                editor.AutoFilter = False
                editor.EditorControl.MasterTemplate.FilterDescriptors.Clear()
            End If
        End Sub

     

    but not filter nothing .

  8. Dimitar
    Admin
    Dimitar avatar
    1404 posts

    Posted 14 Jul Link to this post

    Hi Javier,

    Thank you for writing.

    I have attached a sample project that shows how this works on my side. Please note that you need to enter at least 5 letters in order to start filtering.

    I hope this will be useful. 

    Regards,
    Dimitar
    Telerik by Progress
    Check out the Windows Forms project converter, which aids the conversion process from standard Windows Forms applications written in C# or VB to Telerik UI for WinForms.For more information check out this blog post and share your thoughts.
Back to Top
UI for WinForms is Visual Studio 2017 Ready