2012-04-03 10 views
1

私はdatalistで印刷されたデータソース内のデータをフィルタリングしようとしています。私はデータリストを使う方法を知っていて、それに問題はありません。問題はフィルタリングにあります。名前のプロパティが含まれていません 'System.Data.DataRowView' 'PRODUCTID':DataTable.Select DataListのDataSourceとして

データバインディング:私はこの問題を受け取った後、その

DataSet ds = (DataSet)Application["Products"]; 
DataSet newDS = new DataSet(); 
newDS.Tables.Add("products"); 

DataRow[] DR = ds.Tables[0].Select("CategoryID='" + this.CategoryID + "'"); 
for (int i = 0; i < DR.Length; i++) 
    newDS.Tables[0].ImportRow(DR[i]); 

PagedDataSource PDS = new PagedDataSource(); 
PDS.DataSource = newDS.Tables[0].DefaultView; 
PDS.AllowPaging = true; 
PDS.PageSize = 9; 
PDS.CurrentPageIndex = CurrentPage; 

this.DataList_Products.DataSource = PDS; 
this.DataList_Products.DataBind(); 

は、私はこれを試してみました。

ProductIDというプロパティがありますが、この問題を解決するにはどうすればよいですか?

答えて

0

新しいデータセット(およびそのデータテーブル)には、元のデータセットの構造がありません。

DataSet ds = (DataSet)Application["Products"]; 
DataSet newDS = new DataSet(); 
DataTable newTable = ds.Tables[0].Clone();//this copies the structure 
newDS.Tables.Add(newTable); 
+0

ありがとうございます! –

+0

@JohnSmithはうれしいです。あなたがその答えを受け入れることができればいいでしょう。 – scartag

+0

どういう意味ですか? –

1

多分私は何かが欠けているかもしれませんが、必要以上にコードがあるようです。また、LINQを利用するには、

this.DataList_Products.DataSource = ds.Tables[0].AsEnumerable().Where(r => r.Field<int>("CategoryID") == this.CategoryID).AsDataView().ToTable(); 
this.DataList_Products.DataBind();