从DataGridView数据源类型转换BindingList
本文关键字:BindingList 类型转换 数据源 DataGridView | 更新日期: 2023-09-27 18:19:09
我有接口IDoc和一个实现它的抽象类Doc。然后,我有一个名为BookDoc的类继承自Doc,另一个类JournalDoc也继承自Doc。
现在我想做的是绑定BindingList<BookDoc>
或BindingList<JournalDoc>
到自定义DataGridView。然后,我希望能够访问一个Errors属性,它们都继承自Doc类。
半工作示例:
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>;
这给了我一个空文档列表。
如果您正在使用。net 4.0,您可以使用IEnumarable<>
:
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);
}