-6

私はこれを試していますが、成功していません

var v=ds.Table[0].AsEnumerable().Where<DataRow>(r=>r.Field<int>("productID")==23);
GridView1.DataSource=v;
GridView1.DataBind();

見出し RowError HasRrror を 1 行だけ表示する gridview ですが、製品情報を含む 1 行が必要です。

4

2 に答える 2

0

これを試して。

var results = from myRow in ds.Table[0].Rows 
              where myRow.Field<int>("productID") == 23
              select myRow;

これにより、探している行が表示されます。

于 2012-05-15T10:51:05.050 に答える
0

使ってみるといいと思います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 クラスの物理プロパティを示します。

于 2012-05-15T10:59:01.387 に答える