数据绑定网格LINQ异步ASP.NET C# [英] Databind Grid LINQ Asynchronous ASP.NET C#
问题描述
我有一个网页加载速度有点慢,因为这样的话我想之后的页面加载完成加载在GridView中的数据。
我想,继续使用我的LinqDataSource1_Selecting - 因为我得到这个错误,当我绑定的GridView与Grid1.DataSource:
无法为未实现ICollection的数据源计算计数。
块引用>有关现在我已经使用BackgroundWorker的,异步页和一个计时器尝试。但我真的不能让他们太喜欢工作,我想。
这是如何,我结合我的数据:
保护无效LinqDataSource1_Selecting(对象发件人,LinqDataSourceSelectEventArgs E)
{
GWportalDataContext DB =新GWportalDataContext();
DeliveryTimeRepository dltRep =新DeliveryTimeRepository(); VAR查询从o在db.Orders =
加入的Y db.OrderLines上o.OrderID等于y.OrderID
在db.Products加入X在y.ItemNumber等于x.ItemNumber
其中,o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber
新选择
{
o.OrderID,
o.AxaptaSalesId,
y.ItemNumber,
名称= x.Name + o.OrderID,
x.ProductFormatName,
y.Quantity,
y.Price,
状态= dltRep.getOrderStatus(o.OrderID,o.AxaptaSalesId,y.ItemNumber).Substring(0,dltRep.getOrderStatus(o.OrderID,o.AxaptaSalesId,y.ItemNumber).LastIndexOf(|))
撬动= dltRep.getOrderStatus(o.OrderID,o.AxaptaSalesId,y.ItemNumber).Substring(dltRep.getOrderStatus(o.OrderID,o.AxaptaSalesId,y.ItemNumber).LastIndexOf(|))。更换(| ,)
}; VAR QUERY2 =从o在db.AxSales
加入的Y db.AxSaleLines上o.SalesId等于y.SalesId
在db.Products加入X在y.ItemNumber等于x.ItemNumber
其中,o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber
新选择
{
订单id = o.SalesId,
AxaptaSalesId = o.SalesId,
y.ItemNumber,
名称= x.Name + o.SalesId,
x.ProductFormatName,
y.Quantity,
价格= y.SalesPrice,
状态= dltRep.getAxOrderStatus(o.SalesId,y.ItemNumber).Substring(0,dltRep.getAxOrderStatus(o.SalesId,y.ItemNumber).LastIndexOf(|))
撬动= dltRep.getAxOrderStatus(o.SalesId,y.ItemNumber).Substring(dltRep.getAxOrderStatus(o.SalesId,y.ItemNumber).LastIndexOf(|))。更换(|,)
}; //查询1日开始
变种dataToList = query.ToList();
清单<对象> deletedItems = dataToList.Where(项目= GT; orderDeleted(item.OrderID,item.AxaptaSalesId))演员下;对象方式>()了ToList();
VAR datatoGrid = dataToList.Except(deletedItems);
//查询1月底 //查询2开始
变种dataToList2 = query2.ToList();
清单<对象> deletedItems2 = dataToList2.Where(项目= GT; axOrderDeleted(item.AxaptaSalesId))演员下;对象方式>()了ToList();
VAR dataToGrid2 = dataToList2.Except(deletedItems2);
//查询2月底 VAR合并= datatoGrid.Union(dataToGrid2);
e.Result =相结合;
}
解决方案您确保投你
e.Result
回一个名单,LT ;对象>
,当你把它绑定到数据网格DataGrid.DataSource =(列表<对象>)e.Result;
e.Result
是对象
不落实的ICollection
根据OP评论
既然你调用此为
datatoGrid.Union(dataToGrid2);
您只需做一个
dataGrid.Union(dataToGrid2).ToList();
I have a page loading a bit slow, and because of that I want to load the data in the gridview AFTER the page is done loading.
I would like to, keep using my LinqDataSource1_Selecting - since I get this error when I bind the gridview with Grid1.DataSource:
Cannot compute Count for a data source that does not implement ICollection.
For now I've tried using BackgroundWorker, Asynchronous Pages and a timer. But I can't really get them too work like I want to.
This is how I'm binding my data:
protected void LinqDataSource1_Selecting(object sender, LinqDataSourceSelectEventArgs e) { GWportalDataContext db = new GWportalDataContext(); DeliveryTimeRepository dltRep = new DeliveryTimeRepository(); var query = from o in db.Orders join y in db.OrderLines on o.OrderID equals y.OrderID join x in db.Products on y.ItemNumber equals x.ItemNumber where o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber select new { o.OrderID, o.AxaptaSalesId, y.ItemNumber, Name = x.Name + o.OrderID, x.ProductFormatName, y.Quantity, y.Price, Status = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(0, dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")), Levering = dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).Substring(dltRep.getOrderStatus(o.OrderID, o.AxaptaSalesId, y.ItemNumber).LastIndexOf("|")).Replace("|", "") }; var query2 = from o in db.AxSales join y in db.AxSaleLines on o.SalesId equals y.SalesId join x in db.Products on y.ItemNumber equals x.ItemNumber where o.AccountNumber == AppSession.CurrentLoginTicket.AccountNumber select new { OrderID = o.SalesId, AxaptaSalesId = o.SalesId, y.ItemNumber, Name = x.Name + o.SalesId, x.ProductFormatName, y.Quantity, Price = y.SalesPrice, Status = dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).Substring(0, dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).LastIndexOf("|")), Levering = dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).Substring(dltRep.getAxOrderStatus(o.SalesId, y.ItemNumber).LastIndexOf("|")).Replace("|", "") }; //Query 1 start var dataToList = query.ToList(); List<object> deletedItems = dataToList.Where(item => orderDeleted(item.OrderID, item.AxaptaSalesId)).Cast<object>().ToList(); var datatoGrid = dataToList.Except(deletedItems); // Query 1 end //Query 2 start var dataToList2 = query2.ToList(); List<object> deletedItems2 = dataToList2.Where(item => axOrderDeleted(item.AxaptaSalesId)).Cast<object>().ToList(); var dataToGrid2 = dataToList2.Except(deletedItems2); //Query 2 end var combined = datatoGrid.Union(dataToGrid2); e.Result = combined; }
解决方案Are you making sure to cast you
e.Result
back into aList<Object>
when you bind it to your data grid?DataGrid.DataSource = (List<Object>)e.Result;
e.Result
is anObject
which doesn't implementICollection
Based on OP comments
Since you are calling this as
datatoGrid.Union(dataToGrid2);
You just need to do a
dataGrid.Union(dataToGrid2).ToList();
这篇关于数据绑定网格LINQ异步ASP.NET C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!