Back to Devexpress

BaseListBoxControl.ParseSearchControlText Event

windowsforms-devexpress-dot-xtraeditors-dot-baselistboxcontrol-f6a60489.md

latest4.7 KB
Original Source

BaseListBoxControl.ParseSearchControlText Event

Fires when a related SearchControl fires a query to the current List Box. Allows you to create a filter condition based on the query and specify how to highlight results in the control.

Namespace : DevExpress.XtraEditors

Assembly : DevExpress.XtraEditors.v25.2.dll

NuGet Package : DevExpress.Win.Navigation

Declaration

csharp
[DXCategory("Data")]
public event EventHandler<ParseSearchControlTextEventArgs> ParseSearchControlText
vb
<DXCategory("Data")>
Public Event ParseSearchControlText As EventHandler(Of ParseSearchControlTextEventArgs)

Event Data

The ParseSearchControlText event's data class is DevExpress.XtraEditors.ParseSearchControlTextEventArgs.

Remarks

The SearchControlText event argument returns the query in the search control. Based on the query, you can create a CriteriaOperator object that specifies a filter condition. To apply the condition to the control, use the SetFindCriteriaAndHighlight method.

Example

The code below shows how to use a comma to split the search query into several queries.

csharp
using DevExpress.Data;
using DevExpress.Data.Filtering;

private void listBoxControl1_ParseSearchControlText(
    object sender, DevExpress.XtraEditors.ParseSearchControlTextEventArgs e) {
    if(string.IsNullOrWhiteSpace(e.SearchControlText))
        return;
    List<string> criteria = new List<string>();
    foreach(string criteriaString in e.SearchControlText.Split(new[] { ',' }, 
        StringSplitOptions.RemoveEmptyEntries)) {
        string str = criteriaString;
        if(criteriaString[0] == ' ')
            str = criteriaString.Remove(0, 1);
        criteria.Add(str);
    }

    if(criteria.Count < 2)
        return;

    string filterString = String.Empty;
    for(int i = 0; i < criteria.Count; i++) {
        filterString += "Contains([LastName], '" + criteria[i] + "')";
        if(i != criteria.Count - 1)
            filterString += " OR ";
    }

    CriteriaOperator _findCriteria = CriteriaOperator.Parse(filterString);

    e.SetFindCriteriaAndHighlight(_findCriteria,
    (x) => {
        var arr = new DisplayTextHighlightRange[criteria.Count()];
        for(int i = 0; i < criteria.Count(); i++) {
            arr[i] = new DisplayTextHighlightRange(x.IndexOf(criteria[i]), criteria[i].Length);
        }
        return arr;
    });
    e.Handled = true;
}
vb
Option Infer On

Imports DevExpress.Data
Imports DevExpress.Data.Filtering

Private Sub listBoxControl1_ParseSearchControlText(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.ParseSearchControlTextEventArgs)
    If String.IsNullOrWhiteSpace(e.SearchControlText) Then
        Return
    End If
    Dim criteria As New List(Of String)()
    For Each criteriaString As String In e.SearchControlText.Split( { ","c }, StringSplitOptions.RemoveEmptyEntries)
        Dim str As String = criteriaString
        If criteriaString.Chars(0) = " "c Then
            str = criteriaString.Remove(0, 1)
        End If
        criteria.Add(str)
    Next criteriaString

    If criteria.Count < 2 Then
        Return
    End If

    Dim filterString As String = String.Empty
    For i As Integer = 0 To criteria.Count - 1
        filterString &= "Contains([LastName], '" & criteria(i) & "')"
        If i <> criteria.Count - 1 Then
            filterString &= " OR "
        End If
    Next i

    Dim _findCriteria As CriteriaOperator = CriteriaOperator.Parse(filterString)

    e.SetFindCriteriaAndHighlight(_findCriteria, Function(x)
        Dim arr As DisplayTextHighlightRange = New DisplayTextHighlightRange(criteria.Count() - 1){}
        For i As Integer = 0 To criteria.Count() - 1
            arr(i) = New DisplayTextHighlightRange(x.IndexOf(criteria(i)), criteria(i).Length)
        Next i
        Return arr
    End Function)
    e.Handled = True
End Sub

See Also

BaseListBoxControl Class

BaseListBoxControl Members

DevExpress.XtraEditors Namespace