2011-12-01 68 views
1

我試圖使用下面的代碼在我的WinForms應用程序(dgvOrderSizes)上填充DataGridView。正如代碼中所評論的,如果我將cod分配給我的DataGridView,它的填充狀況良好,但是當我嘗試將orderDetails分配給它時,它不會被填充。我試着調試代碼,發現DataSource屬性分配正確,所以我想知道爲什麼網格不能填充? (有沒有異常升高)DataGridView無法填充LINQ到SQL對象

protected void ShowOrderDetails(int orderNo) 
    { 

     this.dgvOrderSizes.DataSource = null; 

     var cod = from orderDetail in db.OrderDetails 
           where orderDetail.OrderNo == orderNo 
           select orderDetail; 

     //this.dgvOrderSizes.DataSource = cod;  //works until here 


     var orderDetails = from pOrder in cod.AsEnumerable() 
           select new { pOrder.Plies, pOrder.Composition, pOrder.Size, pOrder.UnitName, pOrder.Quantity, pOrder.Rate, pOrder.ProductionUnitName, pOrder.DeliveryUnitName }; 

     this.dgvOrderSizes.DataSource = orderDetails;  //doesn't work 
    } 

回答

1

DataGridView中使用了相當驚人數量的API,包括IListSource,IList的,ITypedList,IBindingList的,IBindingListView,最CompnentModel(包括所有的描述符的東西),並憤怒的更。如果你說它適用於「cod」,那麼LINQ-to-SQL至少可以提供其中的一種API,而LINQ-to-Objects不會(這很好,不需要)。

只需調用ToList()和所有將工作:

blah.DataSource = orderDetails.ToList(); 
+0

感謝馬克,它的工作原理perfectly.But我仍然好奇,爲什麼LINQ到對象不會支持所有這些接口中的至少一個? – UIS

+0

@UIS,因爲它旨在提供非緩衝迭代器塊方法;你不能在這樣的設備上獲得長度,所以IList是不可能的 –