数据绑定网格LINQ异步ASP.NET C# [英] Databind Grid LINQ Asynchronous ASP.NET C#

查看:141
本文介绍了数据绑定网格LINQ异步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 a List<Object> when you bind it to your data grid?

DataGrid.DataSource = (List<Object>)e.Result;

e.Result is an Object which doesn't implement ICollection

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆