2013-01-24 11 views
7

hi bu deneyin:Satırları bir arama çubuğunda bir veri tablosunda nasıl arayabilirim? Bunun için benim DataTable satırları aramak istediğiniz

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

     } 

Ama benim dizesinde bir hata var. Bu sütunlarda arama yapmak istersem ne yapabilirim?

cevap

23

Hata alıyorsunuz çünkü Select parametresi filterExpression ve tüm sütunları geçtiniz. FilterExpression öğesini sql içinde WHERE yan tümcesi olarak anlayın. Tüm sütunları istiyorsunuz, ancak sadece bir tanesine göre filtrelemek istiyorsunuz. Tüm sütunları, hepsi DataTable/DataView'un bir parçası olduğundan, bunları açıkça listelemeniz gerekmediğinden, elde edersiniz.

Şunları kullanabilirsiniz ya DataTable.Select, DatView.RowFilter yöntemleri veya LINQ-to-DataSet:

LINQ-To-DataSet (i tercih):

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

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

Linq ile aynı:

tb.DefaultView.RowFilter = "CREATOR LIKE '%" + searchstring + "%'"; 

yerine herhangi sütununda string aramak istiyorsanız 10

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

bu eşdeğer ama tüm sütunları :( – Tarasov

+0

@Tarasov arama yapmak istiyorum: olduklarını beri zaten tüm sütunları olsun, tüm sütunları istediğiniz, ancak tek filtre uygulamak istediğiniz 'DataTable'/'DataView' bölümünün tamamı. –

+0

Bu sütun için her sütunda arama yapmak istiyorum. – Tarasov

2

bazı kimse ihtiyaçları bir DataTable özel olarak dönerseniz Aşağıdaki kodu kullanabilirsiniz:

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

Seçimde kullanacağınız sorguyu oluşturabilirsiniz.

  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 ... 
İlgili konular