IAb*_*act 2 linq vb.net datasource datagridview winforms
我在VB中有以下内容:
Dim sources = From source In importSources Select New With _
{.Type = source.Key, .Source = source.Value.Name}
dgridSourceFiles.DataSource = sources
Run Code Online (Sandbox Code Playgroud)
当我调试时,sources显示一个内存中的查询,并在其中有2条记录.然而,datagrid视图不会显示记录.
那么为什么这不起作用呢?建议可以是VB或C#......
我用的时候:
Dim sources = (From source In importSources Select New With _
{.Type = source.Key, .Source = source.Value.Name}).ToList()
Run Code Online (Sandbox Code Playgroud)
...显示数据源.
您的LINQ查询被懒惰地评估并且IEnumerable<T>仅实现接口(据我所知),这意味着它的结果直到枚举器调用MoveNext某个地方才会建立(例如,在foreach循环中发生).
似乎DataSource财产没有以这种方式列举其内容.它完全期望IList(或其他一些接口之一 - 见下文)的实现,以便它可以通过索引访问项目.这由控件在内部用于排序,过滤等.考虑到这一点,所有设置DataSource属性的可能是检查对象的类型以查看它是否实现任何支持的接口.所以我认为该DataSource属性不是为了处理这种类型的对象(一个懒惰的评估查询)而设计的.
现在,该ToList调用List<T>使用查询结果填充a ; 这确实实现了IList,因此可以用作DataSource.
我的理解是,原因DataSource仅仅object是因为它需要以下任何接口:
IListIListSource(在这种情况下,该IListSource.GetList方法与DataMember属性一起使用以向控件提供数据)IBindingList (将列表中的更改传播到UI更新的控件)IBindingListView(像BindingSource)这是根据MSDN文档.
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |