2011-12-21 2 views
0

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

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

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

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

Это, как я связывании мои данные:

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

ответ

0

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

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

e.Result является Object, который не реализует ICollection

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

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

datatoGrid.Union(dataToGrid2); 

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

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

При использовании трансляции я получаю следующее сообщение об ошибке: Невозможно передать объект типа ' d__88'1 [System.Object]' для ввода 'System.Collections.Generic.List'1 [System.Object] ». – KLIM8D

+0

C#: var combination = datatoGrid.Union (dataToGrid2); Grid1.DataSource = (Список ) комбинированный; Grid1.DataBind(); – KLIM8D

+0

@ KLIM8D посмотреть мои правки – msarchet

Смежные вопросы