2011-04-29 212 views
1

我有一個SL4 WCF/RIA LOB正在學習。我有一個SQL視圖返回當前庫存作爲IQueryable。因爲它是一個SQL視圖,所以它被標記爲只讀,這是我想要/不需要更改數據庫。ObservableCollection(ReadOnly)可編輯

在前端(視圖),我想用信息填充DataGrid,但允許用戶選擇可用庫存時可以編輯它。在我看來,DataGrid的綁定應該是我可以在內存中操作的另一個集合。

目前,我有一個典型的DDS拉動查詢從後面:

<riaControls:DomainDataSource AutoLoad="True" LoadedData="qryInventoryDds_LoadedData" 
            Name="qryInventoryDds" QueryName="GetQryInventoriesQuery" > 
     <riaControls:DomainDataSource.DomainContext> 
      <my:DomainService1 /> 
     </riaControls:DomainDataSource.DomainContext> 
    </riaControls:DomainDataSource> 

如果有人可以給我方向我應該如何「複製」這個e.Entities或者這樣,所以我可以操縱它,然後綁定它,我會很感激。

我搜索了幾天,真的找不到一些很好的例子。

非常感謝!

回答

0

試試這個。

<data:DataGrid x:Name="myDataGrid" ItemsSource="{Binding ElementName=qryInventoryDds, Path=Data}" RowDetailsVisibilityMode="VisibleWhenSelected"> 
+0

不幸的是,這樣做不允許我進行任何編輯,因爲集合被標記爲只讀。 – Mark 2011-05-01 10:45:49

0

我所做的事情是通過返回的集合創建一個新的ObservableCollection是不是domaincontext的一部分迭代。我相信這被稱爲深層複製。

由於VS將所有業務對象屬性標記爲主鍵,因此似乎沒有方法可以輕鬆地從SQL視圖中檢索可編輯集合。有一些策略我已經閱讀/試圖在SQL視圖中標記所有字段COALESCE(propery,null),但這對我並不適用。還有一些嘗試和編輯底層模型XML,但是這必須在視圖的每個變化上完成,這是非常有問題的。

如果有人知道更好的解決方案,我全都聽。

謝謝。