2011-12-30 70 views
0

我有接口IDoc和一個實現它的抽象類名爲Doc。然後我有一個名爲BookDoc的類繼承自Doc和另一個類JournalDoc,該類也繼承自Doc。從DataGridView類型轉換綁定列表數據源

現在我想要做的是將BindingList<BookDoc>BindingList<JournalDoc>綁定到自定義的DataGridView。然後我希望能夠訪問它們都從Doc類繼承的Errors屬性。

半工作例:

var dataSource = this.DataSource as BindingSource; 

BindingList<BookDoc> tempBookDocs = dataSource.DataSource as BindingList<BookDoc>; 

var Docs = new List<IDoc>(); 

foreach (var tempDoc in tempBookDocs) 
{ 
    Docs.Add(tempDoc); 
} 

上面的示例工程和我得到的是填充的文檔的列表,我可以訪問Errors屬性,但還是要硬代碼,原本綁定列表的類型。

我想要做的是這樣的事情,雖然我不知道這是可能的。

var dataSource = this.DataSource as BindingSource; 

BindingList<Doc> Docs = dataSource.DataSource as BindingList<Doc>; 

雖然這給了我一個空文檔列表。

回答

2

如果你使用.NET 4.0,您可以使用IEnumarable<>利用covariance

IEnumarable<Doc> tempBookDocs = dataSource.DataSource as IEnumarable<Doc>; 

var Docs = new List<IDoc>(); 

foreach (var tempDoc in tempBookDocs) 
{ 
    Docs.Add(tempDoc); 
} 

如果您使用.NET 3.5,你可以使用LINQ OfType擴展方法:

IEnumarable<Doc> myDocs = ((IEnumarable)dataSource.DataSource).OfType<Doc>(); 

var Docs = new List<IDoc>(); 

foreach (var tempDoc in myDocs) 
{ 
    Docs.Add(tempDoc); 
} 
+0

謝謝多數人完全是我需要它 – 2011-12-30 14:20:20