Ответ 1
Попробуйте следующее:
dtSearch.DefaultView.RowFilter = "cust_Name like '" + txtSearch.Text + "%'";
И проверьте, нет ли места, которое нужно удалить, путем подрезания текста.
У меня есть Datagridview, а Data Source
- dtCustomer
Я просто хочу отфильтровать содержимое сетки на основе текста поиска. Истировал следующий код
DataTable dtSearch = dtCustomer;
dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = dtSearch;
Но это не работает. Если какой-либо орган знает решение, поделитесь им.
Попробуйте следующее:
dtSearch.DefaultView.RowFilter = "cust_Name like '" + txtSearch.Text + "%'";
И проверьте, нет ли места, которое нужно удалить, путем подрезания текста.
Возвращаемое значение для DataTable.Select - это массив DataRow []. Он возвращает список соответствующих DataRows. В настоящий момент ваш код ничего не делает с этими строками.
Вы можете настроить DataView фильтр и установить в DataView источник данных сетки:
DataView dv = new DataView(dtSearch);
dv.RowFilter = "...";
grvCustomer.DataSource = dv;
Вы можете попробовать использовать DataView (код не протестирован) -
DataView dv = new DataView(dtSearch);
dv.RowFilter = "cust_Name like '" + txtSearch.Text + "%'";
grvCustomer.DataSource = dv;
Или попробуйте это;
dataGridView.Datasource = datatable.Select("....").CopyToDataTable()
DataTable.Select возвращает массив строки, но вы привязываете целую таблицу данных, а не отфильтрованные строки. используйте этот способ или DataView
DataTable dtSearch = dtCustomer;
var filter = dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = filter.ToList();
Вы можете сделать что-то вроде этого.
DataView dv1 = dtDefault.DefaultView;
dv1.RowFilter = "CusGroupId=1 and CustomerCode LIKE '"+txtCustomer.Text +"%'";
DataTable dt=dv1.ToTable();
Я думаю, что это то, что вы ищете?
//DataTable dtSearch = dtCustomer;
//dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = dtCustomer.Select("cust_Name like '" + txtSearch.Text + "%'");
И когда вы хотите вернуться к исходным данным
grvCustomer.DataSource = dtCustomer;
dtCustomer.Rows.Cast<DataRow>().Select(dr => (string)dr["cust_Name"].Startswith("zzz")).ToList()