Как фильтровать DataView на основе нескольких входов - PullRequest
1 голос
/ 30 марта 2011

Я знаю, как фильтровать данные на основе ввода пользователя из одного текстового поля:

FilterDataView.RowFilter = txtFilter.Text;

Но как бы вы пошли на фильтрацию данных на основе несколькихпользовательский ввод из нескольких полей.По сути, фильтр будет выполнять функцию поиска.

Ответы [ 3 ]

5 голосов
/ 30 марта 2011

Вы можете использовать что-то вроде light t-sql при определении RowFilter.

Одна идея:

FilterDataView.RowFilter = "name like '%habjan%' and city like '%new york%'"

Здесь вы можете найти хорошую статью о синтаксисе RowFilter: DataView RowFilter Syntax

Для того, что вам нужно, вам нужно будет построить фильтр строк на основе введенных полей.

    StringBuilder sb = new StringBuilder();

    if (tb1.Text.Length > 0)
    {
       sb.Append("name like '%" + tb1.Text + "%'");
    }

    if (tb2.Text.Length > 0)
    {
       if(sb.Length > 0)
       {
           sb.Append(" and ");
       }

       sb.Append("city like '%" + tb2.Text + "%'");
    }
    //.... and so on...

    FilterDataView.RowFilter = sb.ToString();
1 голос
/ 30 марта 2011

Поиск в MSDN (LINQ to DataSet) http://msdn.microsoft.com/en-us/library/bb669073.aspx

0 голосов
/ 30 марта 2011

Хорошо, Linq to SQL станет вашим другом.

Вам нужно изучить синтаксис, и есть несколько различных форм, но вы можете воссоздать свой запрос следующим образом:

var x = from T in db.Table
        where [usual where stuff goes here];

Затем вы можете протестировать каждое текстовое поле и выполнить следующие действия:

if (TextBox1.Text != null) x.Where(w => w.field1 == val1);

Приятно то, что вы можете накладывать те предложения Where по одному за раз.Затем просто привяжите свой объект к переменной.

[objectname].Datasource = x; 
[objectname].Databind();

Это должно решить вашу проблему.

...