Сетка привязки данных LINQ Асинхронный ASP.NET C # - PullRequest
0 голосов
/ 21 декабря 2011

У меня страница загружается немного медленно, и из-за этого я хочу загрузить данные в виде сетки ПОСЛЕ того, как страница закончила загрузку.

Я хотел бы продолжать использовать мой LinqDataSource1_Selecting - так как яполучить эту ошибку, когда я связываю gridview с Grid1.DataSource:

Невозможно вычислить Count для источника данных, который не реализует ICollection.

Пока я попробовалиспользуя BackgroundWorker, асинхронные страницы и таймер.Но я не могу заставить их работать так, как хочу.

Вот как я связываю свои данные:

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;
}

1 Ответ

0 голосов
/ 21 декабря 2011

Обязательно ли вы приводите e.Result обратно в List<Object>, когда привязываете его к своей сетке данных?

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

e.Result - это Object, который не реализует ICollection

Основано на комментариях ОП

Поскольку вы называете это

datatoGrid.Union(dataToGrid2);

Вам просто нужно сделать

dataGrid.Union(dataToGrid2).ToList();
...