2010-10-31 70 views
1

我將linq-to-sql查詢的結果綁定到datagridview。如果我只是從單個數據庫表中選擇,這工作正常。但是,如果是從兩個表中選擇字段的聯接查詢,那麼因爲選擇將進入匿名類型,所以結果是隻讀的。因此我的datagridview也是隻讀的。我希望DGV中的字段是可編輯的。將datagridview綁定到多個表linq-to-sql查詢

如果我創建了一個非匿名類型,並在linq查詢中使用它,那麼DGV是可編輯的,但調用SubmitChanges()方法不起作用。我知道我可以在調用SubmitChanges()之前手動填充結果,但感覺應該有更好的方法來做到這一點。尤其是考慮到它必須是一個相當普遍的任務。

這樣做的建議方法是什麼?

謝謝任何​​幫助,
丹。

回答

2

我所做的是創建一個顯示類,將linq以sql表對象作爲參數傳遞給構造函數,然後僅包裝我想要顯示的屬性。例如,下面的類,我想允許編輯街道和城市,但也顯示應用程序數量和狀態:

public class AddressDisplay 
{ 
    private Retailer _retailer; 
    private BusinessAddress _address; 

    public AddressDisplay(Retailer retailer, BusinessAddress address) 
    { 
     _retailer = retailer; 
     _address = address; 
    } 

    public string ApplicationNumber 
    { 
     get { return _retailer.ApplicationNumber; } 
    } 
    public string Status 
    { 
     get { return _retailer.Status; } 
    } 
    public string Street 
    { 
     get { return _address.Street1; } 
     set { _address.Street1 = value; } 
    } 
    public string City 
    { 
     get { return _address.City; } 
     set { _address.City = value; } 
    } 
} 

,然後返回實例AddressDisplay綁定到DataGridView

var addresses = from a in _context.BusinessAddresses 
       join r in _context.Retailers on a.ApplicationNumber equals r.ApplicationNumber 
       where a.City == city 
       select new AddressDisplay(r, a); 

HTH

+0

神奇 - 完美的作品。非常感謝您的幫助! :-) – Dan 2010-11-01 13:19:57