Я пытаюсь сортировать элементы в списке, которые у меня есть, элементы заполняются в listview из SelectMethod в объявлении ASPX listviews.Сортировка существующих элементов в listview
<asp:ListView ID="productList" runat="server"
DataKeyNames="ProductID" GroupItemCount="4"
ItemType="StoreTest.Models.Product" SelectMethod="GetProducts" >
метод просто делает запрос Linq и возвращает запрос обратно в Listview, это внутренняя работа класса и работает списке следует хорошо. Проблема в том, что у меня есть раскрывающийся список с разными переменными каждого элемента, пользователь может использовать этот DDL для сортировки списка.
Я поместил в DDL метод OnSelectedIndexChanged, который выполняет тот же запрос, что и исходный запрос, но затем заказывает его на основе требуемого механизма сортировки. Проблема в том, что я не могу заменить существующие элементы в списке на этот новый запрос. Мой код это выглядит следующим образом:
productList.Items.Clear();
var _db = new StoreTest.Models.SiteContext();
IQueryable<Product> query = _db.Products;
switch(sortList.SelectedValue)
{
case "Price Asc":
query = query.OrderBy(o=> o.UnitPrice);
break;
case "Price Des":
query = query.OrderByDescending(o => o.UnitPrice);
break;
case "Name Asc":
query = query.OrderBy(o => o.ProductName);
break;
case "Name Des":
query = query.OrderByDescending(o => o.ProductName);
break;
case "Product ID Asc":
query = query.OrderBy(o => o.ProductID);
break;
case "Product ID Des":
query = query.OrderByDescending(o => o.ProductID);
break;
}
productList.DataSource = query;
productList.DataBind();
Это дает мне ошибку, которая «DataSource или DataSourceID не может быть определена на„ProductList“, когда он использует модель связывания», как я мог бы идти о фиксации этого. Я попытался отобразить каждый отдельный продукт в запросе в ListViewItem, но типы были несовместимы и их использование в массиве не сработало.
public IQueryable<Product> GetProducts([QueryString("id")] int? categoryID)
{
var _db = new StoreTest.Models.SiteContext();
IQueryable<Product> query = _db.Products;
if (categoryID.HasValue && categoryID > 0)
{
query = query.Where(p => p.CategoryID == categoryID);
Session["categoryid"] = categoryID;
}
return query;
}
Спасибо.
РЕДАКТИРОВАТЬ Решение: переплета оба раза про грамматически, удаляют привязку в ASPX и изменил первоначальную привязку к защищенной недействительным Page_Load (объект отправителя, EventArgs е) { IQueryable ITEMLIST = GetProducts() ; productList.DataSource = itemList.ToList(); productList.DataBind(); }
public IQueryable<Product> GetProducts()
{
int categoryID = -1;
if(Request.QueryString["id"]!=null)
{
categoryID = Convert.ToInt32(Request.QueryString["id"]);
}
var _db = new StoreTest.Models.SiteContext();
IQueryable<Product> query = _db.Products;
if (categoryID!=-1 && categoryID > 0)
{
query = query.Where(p => p.CategoryID == categoryID);
Session["categoryid"] = categoryID;
}
return query;
}
Второе связывание прекрасно работали как:
productList.DataSource = query.ToList();
productList.DataBind();
Вы получаете ту же ошибку, когда комментируете заказ (оператор switch)? – Peter
@Peter Да, я как-то уже связал данные один раз в коде ASPX. – ObiEff
Можете ли вы поделиться кодом, в котором вы выполняете привязку в коде ASPX? –