DatagridviewとData Source
is dtCustomer
グリッドビューのコンテンツを検索テキストに基づいてフィルタリングしたいだけです。次のコードを繰り返しました
DataTable dtSearch = dtCustomer;
dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = dtSearch;
しかし、これは機能していません。誰かが解決策を知っている場合は共有してください。
これを試して:
dtSearch.DefaultView.RowFilter = "cust_Name like '" + txtSearch.Text + "%'";
そして、テキストをトリミングして、削除するスペースがあるかどうかを確認します。
DataTable.Select の戻り値はDataRow []配列です。一致するDataRowsのリストを返します。現時点では、コードはそれらの行に対して何もしません。
フィルターを使用して DataView を設定し、グリッドのDataSourceをDataViewに設定できます。
DataView dv = new DataView(dtSearch);
dv.RowFilter = "...";
grvCustomer.DataSource = dv;
またはこれを試してください。
dataGridView.Datasource = datatable.Select("....").CopyToDataTable()
DataView (コードはテストされていません)-
DataView dv = new DataView(dtSearch);
dv.RowFilter = "cust_Name like '" + txtSearch.Text + "%'";
grvCustomer.DataSource = dv;
dtCustomer.Rows.Cast<DataRow>().Select(dr => (string)dr["cust_Name"].Startswith("zzz")).ToList()
このようなことができます。
DataView dv1 = dtDefault.DefaultView;
dv1.RowFilter = "CusGroupId=1 and CustomerCode LIKE '"+txtCustomer.Text +"%'";
DataTable dt=dv1.ToTable();
DataTable.Selectは行の配列を返しますが、フィルターされた行ではなくデータテーブル全体をバインドしています。このように使用するか、DataView
DataTable dtSearch = dtCustomer;
var filter = dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = filter.ToList();
これはあなたが探しているものだと思いますか?
//DataTable dtSearch = dtCustomer;
//dtSearch.Select("cust_Name like '" + txtSearch.Text + "%'");
grvCustomer.DataSource = dtCustomer.Select("cust_Name like '" + txtSearch.Text + "%'");
そして、元のデータに戻りたいとき
grvCustomer.DataSource = dtCustomer;