2011-12-21 22 views
0

私は少し遅い読み込みページを持っているので、ページが読み込まれた後にgridviewでデータをロードしたいと思います。DatabindグリッドLINQ非同期ASP.NET C#

私は、私のLinqDataSource1_Selectingを使用して維持したい - 私はGrid1.DataSourceでGridViewのをバインドするとき、私はこのエラーを取得するので:

いる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

あなたがあなたのデータグリッドにバインドしたときにList<Object>に戻ってあなたにe.Resultをキャストしてください作っている:

これは私が私のデータを結合していますどのようにでしょうか?

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

e.Result OPに基づいてICollection

を実装していないObjectであなただけの

を行う必要がありますが

datatoGrid.Union(dataToGrid2); 

としてこれを呼び出しているので

コメント

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

キャストを使用すると、次のエラーメッセージが表示されます。 ' d__88'1 [System.Object]'型のオブジェクトをキャストして 'System.Collections.Generic.List'1 [System.Object] ' – KLIM8D

+0

C#:var combined = datatoGrid.Union(dataToGrid2); Grid1.DataSource =(リスト)を組み合わせたもの。 Grid1.DataBind(); – KLIM8D

+0

@ KLIM8D私の編集を参照してください – msarchet

関連する問題