2011-10-26 100 views
1

我想從Excel文件(.xls)中讀取表格並將其顯示在DataGrid中。該表具有未知的維度,每列具有一個未知類型(字符串,雙精度或整數)的值。如何將ExpandoObjects的集合綁定到數據網格?

我通過COM訪問該文件,並將該表放入ExpandoObjects的列表<>中。當我將DataGrid.ItemSource設置爲列表時,網格保持視覺上爲空。 顯式定義列及其數據綁定會產生運行時消息,表明應用程序無法在ExpandoObjects中找到指定的屬性。

如何在GridView中顯示錶格?我與Silverlight 5 RC一起工作,並希望有一個簡單的方法來實現它。至少比我目前爲Silverlight 2和3看到的解決方案更簡單。

+0

Vladimir Bodurov在他的文章中解決了一個相關的問題[如何通過將每個字典密鑰轉換爲匿名類型對象的屬性來綁定來自IDictionary的IEnumerable的Silverlight DataGrid](http://blog.bodurov.com/How-to-結合-Silverlight的數據網格從 - IEnumerable的-的-IDictionary的)。但是他的解決方案非常大,並且適用於Silverlight 1。 – himmelsfisch

回答

0

我意識到弗拉基米爾Bodurov的solution工作正常,我。我用Dictionaries替換了ExpandoObjects,並使用Bodurov的類將List轉換爲DataGrid可以處理的東西。

0

如果它是動態的並且它不執行ICustomTypeProvider,則在Silverlight 5中它將不會綁定。這是非常不幸的,因爲我們在WPF中有動態數據綁定,並且在屬性可以被知道的情況下(比如Expando),即使編寫一個適用於任何IDynamicMetaObject提供程序的CustomType也不難,更不用說他們可以添加它了對於Expando來說,尤其是因爲它被封了。

因此,底線是,你需要編寫自己的dynamic type implementing ICustomTypeProvider

相關問題