私はこれを試していますが、成功していません
var v=ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23);
GridView1.DataSource=v;
GridView1.DataBind();
見出し RowError HasRrror を 1 行だけ表示する gridview ですが、製品情報を含む 1 行が必要です。
これを試して。
var results = from myRow in ds.Table[0].Rows
where myRow.Field<int>("productID") == 23
select myRow;
これにより、探している行が表示されます。
使ってみるといいと思いますCopyToDataTable
ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23).CopyToDataTable();
Enumerable に変換すると、フィルタリングされたリストにはたとえば識別子がないProductID
ため、グリッドは列のマッピングに失敗し、失敗します。
AsDataView()
または、の代わりにを使用することもできますCopyToDataTable()
。
より詳細な説明は、Binding DataRows にあります。
データ バインディングは、ListBindingHelper および TypeDescriptor クラスによって制御されます。リストにバインドすると、ListBindingHelper.GetListItemProperties メソッドが呼び出され、リスト内の列が取得されます。リストが ITypedList インターフェイスを実装している場合、その GetItemProperties メソッドが呼び出されます。それ以外の場合は、TypeDescriptor を使用してリストの最初の項目のプロパティを取得します。(これは反射を使用します)
DataView クラス (DataTable も IListSource を使用してバインドする) は ITypedList を実装し、テーブル内の列を公開する DataColumnPropertyDescriptors を返します。これが、DataView または DataTable にバインドして列を表示できる理由です。ただし、リストにバインドする場合、列をプロパティとして返すことができる ITypedList はありません。したがって、リフレクションにフォールバックし、DataRow クラスの物理プロパティを示します。