2011-10-20 43 views
11

我有一個DataGridView和Data SourcedtCustomer 我只想基於搜索文本網格視圖的內容進行過濾。 代碼如下DataTable的select()方法

DataTable dtSearch = dtCustomer; 
dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'"); 
grvCustomer.DataSource = dtSearch; 

但是,這是行不通的。 如果有人知道解決方案,請分享。

回答

11

試試這個:

dtSearch.DefaultView.RowFilter = "cust_Name like '" + txtSearch.Text + "%'"; 

並檢查任何有通過修邊文本中刪除空間。

3

你可以嘗試使用一個DataView(代碼未測試) -

DataView dv = new DataView(dtSearch); 
dv.RowFilter = "cust_Name like '" + txtSearch.Text + "%'"; 
grvCustomer.DataSource = dv; 
8

DataTable.Select的返回值是一個DataRow []數組。它返回一個匹配的DataRows列表。您的代碼目前對這些行不做任何處理。

你可以設置一個DataView與過濾器,並設置網格的數據源的數據視圖:

DataView dv = new DataView(dtSearch); 
dv.RowFilter = "..."; 
grvCustomer.DataSource = dv; 
1

DataTable.Select返回行的數組,但是你要綁定整個數據表中未過濾的行。使用這種方式或DataView

DataTable dtSearch = dtCustomer; 
var filter = dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'"); 
grvCustomer.DataSource = filter.ToList(); 
2

或試試這個;

dataGridView.Datasource = datatable.Select("....").CopyToDataTable() 
0

我想這就是你要找的東西?

//DataTable dtSearch = dtCustomer; 
//dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'"); 


grvCustomer.DataSource = dtCustomer.Select("cust_Name like '" + txtSearch.Text + "%'"); 

而當你想回到原來的數據

grvCustomer.DataSource = dtCustomer; 
-1
dtCustomer.Rows.Cast<DataRow>().Select(dr => (string)dr["cust_Name"].Startswith("zzz")).ToList() 
1

你可以做這樣的事情。

DataView dv1 = dtDefault.DefaultView; 
dv1.RowFilter = "CusGroupId=1 and CustomerCode LIKE '"+txtCustomer.Text +"%'"; 
DataTable dt=dv1.ToTable();