2011-10-20 4 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 + "%'"; 

をして、テキストをtrimingことによって除去することができるスペースがあるものは何でも確認してください。

3

あなたはDataView(コードテストされていない)を使用して試みることができる - DataTable.Selectため

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

戻り値はのDataRow []配列です。一致するDataRowのリストを返します。あなたのコードは、現時点ではこれらの行は何もしません。

セットアップでき、フィルタとDataViewとのDataViewにグリッドのDataSourceを設定します。

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