DataTable.Select作为DataList的DataSource

时间:2012-04-03 17:17:02

标签: c# datalist

我正在尝试过滤以datalist打印的数据源中的数据。我知道如何使用datalist并且没有问题。问题在于过滤。

我试过了:

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();
之后我收到了这个问题:

DataBinding:'System.Data.DataRowView'不包含名为'ProductID'的属性。

我有一个名为ProductID的属性,我该如何解决这个问题呢?

2 个答案:

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

答案 1 :(得分:0)

新数据集(及其数据表)没有原始数据集的结构。

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