Search code examples
c#.netwinformsdataviewbindingsource

Filter an integer using Like in BindingSoure.Filter or DataView.RowFilter


I've Trying to filter a DataView which have multiple columns where some is numerical values. Everything works perfectly when typing in a string but once a numerical value gets entered (like checking for courier #) it filters to nothing.

How My Data Displays before filter: enter image description here

How My Data Displays after filter: enter image description here

My Code is as followed:

private void tbxSearchCourier_KeyUp(object sender, KeyEventArgs e)
    {
        string outputInfo = "";
        string[] keyWords = tbxSearchCourier.Text.Split(' ');

        foreach (string word in keyWords)
        {
            if (outputInfo.Length == 0)
            {
                outputInfo = "('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word
                    + "%' OR 'Email Address' LIKE '%" + word + "%')";
            }
            else
            {
                outputInfo += " AND ('Courier #' LIKE '%" + word + "%' OR Name LIKE '%" + word + "%' OR Branch LIKE '%" + word + "%' OR 'Contact Number' LIKE '%" + word
                    + "%' OR 'Email Address' LIKE '%" + word + "%')";
            }
        }
        CourierDV.RowFilter = outputInfo;
    }

I've search for a solution on the web but can't find anything that works. Why is this happening and how can I fix it?


Solution

  • Consider these notes:

    • You've put the column name between '' which makes it as a string literal.

    • Use [] around column name if it's a complex name.

    • To compare an integer column with LIKE operator, you should first convert it to string because LIKE is an string operator.

    • Also make sure your column name is Courier # and it's not the caption/header text.

    Example

    dataView.RowFilter = "Convert([Some Column], System.String) LIKE '12%'";
    

    More Information

    To learn more about supported syntax for filter, take a look at DataColumn.Expression.