2012-04-03 2 views
1

Я пытаюсь отфильтровать данные в моем источнике данных, который был напечатан в datalist. Я знаю, как использовать datalist, и с этим нет никаких проблем. Проблема заключается в фильтрации.DataTable.Select as DataSource 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, как я могу исправить эту проблему?

ответ

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(); 
Смежные вопросы