2013-01-24 14 views
7

hi voglio cercare file nel mio DataTable per questo provo questo:Come posso cercare le righe in un datatable con una stringa di ricerca?

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(); 

     } 

Ma ho un errore nel mio stringa. cosa posso fare se voglio cercare queste colonne?

risposta

23

Si ottiene l'errore perché il parametro su Select è il filtro Expression e sono state passate tutte le colonne. Comprendere filterExpression come clausola WHERE in sql. Vuoi tutte le colonne ma vuoi filtrarne solo una. Ottieni comunque tutte le colonne poiché fanno tutti parte dello DataTable/DataView, quindi non è necessario elencarle in modo esplicito.

Si potrebbe utilizzare il DataTable.Select, DatView.RowFilter metodi o LINQ-to-DataSet:

LINQ to DataSet (che io preferisco):

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 + "%'"; 

Se si vuole cercare questo string in qualsiasi colonna, invece:

DataRow[] filteredRows = tb.Select("FIRSTNAME LIKE '%" + searchstring + "%' OR LASTNAME LIKE '%" + searchstring + "%' OR NAME LIKE '%" + searchstring + "%' OR COMPANY LIKE '%" + searchstring + "%' OR CREATOR LIKE '%" + searchstring + "%'"); 

Lo stesso con 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

ma voglio cercare in tutte le colonne :( – Tarasov

+0

@Tarasov: Volete tutte le colonne, ma si desidera filtrare per uno, si ottiene tutte le colonne in ogni caso dal momento che sono tutta la parte di 'DataTable' /' DataView'. –

+0

Voglio cercare ogni colonna in questa stringa di ricerca.Ho pensato che posso :( – Tarasov

2

se qualcuno esigenze else return specificamente un DataTable voi possibile utilizzare il codice di seguito:

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

è possibile creare la query che si intende utilizzare nella selezione.

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

questo equivale a

select * from dataCustomerAndVehicle where CustomerName LIKE '%...%' AND ... 
Problemi correlati