2013-01-24 17 views
7

hi chcę szukać wierszy w moim DataTable za to próbuję to:Jak mogę wyszukiwać wiersze w datatable za pomocą łańcucha wyszukiwania?

protected void imggastsuche_Click(object sender, EventArgs e) 
     { 
      string searchstring = txtgastsuche.Text; 

      DataTable tb = DataBaseManager.GetDataTable(mysqlconnectionstring); 

      DataRow[] foundRows = tb.Select("FIRSTNAME,LASTNAME,NAME,COMPANY,TIMEFROM,TIMETO,CREATOR Like '%" + searchstring + "%'"); 

      tb = foundRows.CopyToDataTable(); 

      this.ListView.DataSource = tb; 
      this.ListView.DataBind(); 

     } 

Ale mam błąd w moim ciąg. co mogę zrobić, jeśli chcę przeszukać te kolumny?

Odpowiedz

23

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)); 
+0

ale chcę szukać we wszystkich kolumnach :( – Tarasov

+0

@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'. –

+0

Chcę przeszukać każdą kolumnę do tego wyszukiwania.Myślę, że mogę dothis :( – Tarasov

2

jeśli ktoś potrzebuje else return specjalnie DataTable ty można użyć poniższego kodu:

DataTable dtResult= tb.Select("CREATOR LIKE '%"+searchstring+"%'").CopyToDataTable(); 
0

można zbudować zapytanie, którego chcesz użyć w selekcji.

  if(TextBoxCusName.Text != "") 
      { 
       query = "CustomerName LIKE '%" + TextBoxCusName.Text.Trim()+"%' AND "; 
      } 
      if(TextBoxCusContact.Text != "") 
      { 
       query = query + "CustomerNo LIKE '%" + TextBoxCusContact.Text.Trim() + "%' AND "; 
      } 
      if(TextBoxVehicleNo.Text != "") 
      { 
       query = query + "VehicleNo LIKE '%" + TextBoxVehicleNo.Text.Trim()+"%'"; 
      } 
      if(query.EndsWith("AND ")) 
      { 
       query = query.Remove(query.Length - 4); 
      } 
      DataRow[] result = dataCustomerAndVehicle.Select(query); 

to odpowiednik

select * from dataCustomerAndVehicle where CustomerName LIKE '%...%' AND ... 
Powiązane problemy