2013-01-24 26 views
7

hi Tôi muốn hàng tìm kiếm trong DataTable của tôi cho điều này tôi cố gắng này:Làm cách nào để tôi có thể tìm kiếm các hàng trong một cột có thể đặt dữ liệu với chuỗi tìm kiếm?

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

     } 

Nhưng tôi có một lỗi trong chuỗi của tôi. Tôi có thể làm gì nếu tôi muốn tìm kiếm các cột này?

Trả lời

23

Bạn gặp lỗi vì tham số SelectfilterExpression và bạn đã vượt qua tất cả các cột. Hiểu filterExpression như một mệnh đề WHERE trong sql. Bạn muốn tất cả các cột nhưng bạn chỉ muốn lọc một cột. Bạn nhận được tất cả các cột vì chúng là tất cả các phần của DataTable/DataView do đó bạn không cần phải liệt kê chúng một cách rõ ràng.

Bạn có thể có thể sử dụng DataTable.Select, DatView.RowFilter phương pháp hoặc LINQ-to-DataSet:

LINQ-To-DataSet (mà tôi thích):

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

Nếu bạn muốn tìm kiếm string này trong bất kỳ cột thay vì:

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

Cùng với 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

nhưng tôi muốn tìm kiếm trong tất cả các cột :( – Tarasov

+0

@Tarasov: Bạn muốn tất cả các cột nhưng bạn muốn lọc một, bạn sẽ có được tất cả các cột nào vì chúng là tất cả các phần của 'DataTable' /' DataView'. –

+0

Tôi muốn tìm kiếm mọi cột tới chuỗi tìm kiếm này. Tôi nghĩ mình có thể dothis :( – Tarasov

2

Nếu một số một nhu cầu khác trở lại đặc biệt một DataTable bạn có thể sử dụng mã bên dưới:

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

bạn có thể tạo truy vấn bạn sẽ sử dụng trong lựa chọn.

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

tương đương này để

select * from dataCustomerAndVehicle where CustomerName LIKE '%...%' AND ... 
Các vấn đề liên quan