2016-11-07 73 views
0

我想爲Devexpress MVC Gridview實現大型數據庫自定義綁定(Custom Binding Demo),但該項目不使用實體框架的DataContext,而是使用DataTable作爲數據源。Devexpress MVC自定義數據綁定使用數據表

數據錶轉換爲IQueryable的在網格作爲網格不呈現值預計POCO的使用時.BindToCustomData()。

在列表中包裝DataTable的行綁定值,但分組或排序時失敗。

Expando對象方法獲得了相當的效果,但是當爲了排序/分組而擊中DevExpress.Data.Linq.CriteriaToExpressionConverter時,它失敗了,因爲CriteriaToExpressionConverter似乎試圖讀取使用反射導致參數異常作爲動態屬性的屬性的ExpandoObject無法讀取。

任何想法?

+0

您是否嘗試過接觸DevExpress支持? –

回答

0

不,你不應該做使用一個DataTable的DevExpress MVC自定義數據綁定。

我沒有接觸到這個的DevExpress(優良的服務),並經過多次討論,其明確表示,要避免它只是東西。它不是如何設計控制,迫使它浪費時間。使用ORM並讓他們的控制完成繁重的工作。

以下是我的人我自己的瘋狂這個任務和經驗作爲證據,爲什麼這是行不通的。

1)你必須覆蓋大量的樣板(幸好它們提供了大量樣板,但我仍然需要做很多修改),然後完全由你自己來維護和測試。

2)即使是這樣,則不能的DataTable直接結合它必須是類型可查詢的。但DataTable.AsQuerable()返回的IQueryable不能正確綁定,因爲DataRow本質上是一個Dictionary,並且其列不是強類型的,所以它不會在網格中顯示任何值。 (我沒有使用強類型的數據表進行測試,請參閱第4點)

3)使它成爲一個ExpandoObject(動態)對象將獲得綁定,但是您還需要覆蓋它們的ICriteriaToExpressionConverter來處理系統.Linq.Expressions.Expression是在分組,排序,總結時建立起來的。

4)您將需要一個強類型的對象擺脫分2和3的,但那麼你也能解決點1

底線:不要使用數據表與DevExpress的自定義數據綁定;