Otrzymujesz błąd, ponieważ parametr Select
jest filterExpression i wszystkie kolumny zostały pomyślnie przekazane. Zrozumienie wyrażenia filterExpression jako klauzuli WHERE
w sql. Chcesz wszystkie kolumny, ale chcesz filtrować według tylko jednego. Otrzymujesz wszystkie kolumny, ponieważ wszystkie one są częścią DataTable
/DataView
, więc nie musisz ich wyraźnie wymieniać.
Można też użyć DataTable.Select
, DatView.RowFilter
metody lub LINQ-to-DataSet
:
LINQ-DataSet (które wolę):
var filtered = tb.AsEnumerable()
.Where(r => r.Field<String>("CREATOR").Contains(searchstring));
ADO.NET (DataTable.Select
):
DataRow[] filteredRows = tb.Select("CREATOR LIKE '%" + searchstring + "%'");
ADO.NET (DataView.RowFilter
):
tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'";
Jeśli chcesz poszukać string
w dowolnej kolumnie Zamiast:
DataRow[] filteredRows = tb.Select("FIRSTNAME LIKE '%" + searchstring + "%' OR LASTNAME LIKE '%" + searchstring + "%' OR NAME LIKE '%" + searchstring + "%' OR COMPANY LIKE '%" + searchstring + "%' OR CREATOR LIKE '%" + searchstring + "%'");
To samo z Linq:
var filtered = tb.AsEnumerable()
.Where(r => r.Field<String>("FIRSTNAME").Contains(searchstring)
|| r.Field<String>("LASTNAME").Contains(searchstring))
|| r.Field<String>("NAME").Contains(searchstring)
|| r.Field<String>("COMPANY").Contains(searchstring)
|| r.Field<String>("CREATOR").Contains(searchstring));
ale chcę szukać we wszystkich kolumnach :( – Tarasov
@Tarasov: Chcesz wszystkie kolumny, ale chcesz filtrować według jednego, otrzymasz wszystkie kolumny w każdym razie, ponieważ są one wszystkie części 'DataTable' /' DataView'. –
Chcę przeszukać każdą kolumnę do tego wyszukiwania.Myślę, że mogę dothis :( – Tarasov