为什么这个Linq查询不在Dictionary< TKey,TValue>作为DataSource工作

我在VB中有以下内容:
Dim sources = From source In importSources Select New With _
    {.Type = source.Key, .Source = source.Value.Name}

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

要回复问题请先登录注册