2013-01-24 14 views
7

您好我想尋找我的DataTable此行我試試這個:如何使用搜索字符串搜索數據表中的行?

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

     } 

但我在字符串有錯誤。如果我想要搜索此列,我該怎麼辦?

回答

23

你得到的錯誤,因爲參數SelectfilterExpression並且你已經傳遞了所有的列。在sql中將filterExpression理解爲WHERE子句。你想要所有列,但你只想過一個。無論如何你都會得到所有的列,因爲它們都是DataTable/DataView的一部分,所以你不需要明確地列出它們。

您既可以使用DataTable.SelectDatView.RowFilter方法或LINQ-to-DataSet

LINQ到數據集(我喜歡):

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

如果你想在任何列,而不是搜索此string

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

使用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

但我想在所有列:( – Tarasov

+0

@Tarasov搜索:您希望所有列,但要通過一個過濾,你就會得到所有列無論如何,因爲它們是'DataTable' /'DataView'的所有部分 –

+0

我想搜索每一列到這個搜索字符串,我想我可以是:( – Tarasov

2

如果另外一個人需要專門返回一個DataTable你可以使用下面的代碼:

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

您可以構建您要在select中使用的查詢。

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

這相當於

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