我在VB中有以下内容:
Dim sources = From source In importSources Select New With _
{.Type = source.Key, .Source = source.Value.Name}
dgridSourceFiles.DataSource = sources
当我调试时,sources
显示内存中查询并包含 2 条记录。然而数据网格视图不会显示记录。
那么为什么这行不通呢?建议可以是 VB 或 C#...
Update
当我使用时:
Dim sources = (From source In importSources Select New With _
{.Type = source.Key, .Source = source.Value.Name}).ToList()
...显示数据源。
您的 LINQ 查询会被延迟评估并实现IEnumerable<T>
仅接口(据我所知),这意味着在枚举器调用之前其结果不会建立MoveNext
某处(如发生在foreach
循环,例如)。
看来DataSource
property 不会以这种方式枚举其内容。它完全期待着实施IList
(或其他几个接口之一 - 见下文),以便它可以通过索引访问项目。这由控件内部用于排序、过滤等。考虑到这一点,很可能所有设置DataSource
property 的作用是检查对象的类型以查看它是否实现任何受支持的接口。所以我不认为DataSource
属性旨在处理这种类型的对象(延迟评估的查询)。
现在ToList
调用填充一个List<T>
与您的查询结果;这does实施IList
因此可以用作DataSource
.
我的理解是,原因是DataSource
仅键入为object
是它所期望的any以下接口:
- IList http://msdn.microsoft.com/en-us/library/system.collections.ilist.aspx
-
IListSource http://msdn.microsoft.com/en-us/library/system.componentmodel.ilistsource.aspx(在这种情况下
IListSource.GetList
方法与DataMember
向控件提供数据的属性)
-
IBindingList http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglist.aspx(将列表中的更改传播到控件以进行 UI 更新)
-
IBindingListView http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglistview.aspx (like BindingSource http://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx)
这是根据MSDN 文档 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.datasource.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)