Vb.net 为什么不是';t这是字典上的Linq查询<;TKey,TValue>;作为数据源工作
我在VB中有以下内容:Vb.net 为什么不是';t这是字典上的Linq查询<;TKey,TValue>;作为数据源工作,vb.net,winforms,linq,datagridview,datasource,Vb.net,Winforms,Linq,Datagridview,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
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
接口(据我所知),这意味着只有在枚举器调用MoveNext
某个地方(例如,在foreach
循环中发生的情况)时,才会建立其结果
DataSource
属性似乎没有以这种方式枚举其内容。它完全希望实现IList
(或下面的几个其他接口之一),以便可以通过索引访问项目。控件内部使用它进行排序、筛选等。考虑到这一点,DataSource
属性的所有设置可能都是检查对象的类型,以查看它是否实现了任何受支持的接口。因此,我认为DataSource
属性根本不适合处理这种类型的对象(一个延迟计算的查询)
现在,该ToList
调用用查询结果填充列表
;这确实实现了IList
,因此可以用作数据源
我的理解是,之所以将数据源
键入为对象
,是因为它需要以下任何接口:
- (在这种情况下,
IListSource.GetList
方法与DataMember
属性一起使用,以向控件提供数据)
- (将列表中的更改传播到控件以进行UI更新)
- (像)
这是根据。设置源后,可能需要调用数据绑定。尝试:
dgridSourceFiles.DataSource = sources
dgridSourceFiles.DataBind()
我不这么认为。DataSource上的MSDN文档说明它必须为Nothing或实现IEnumerable或IListSource@jwiscarson:您发布的链接是针对System.Web.UI.WebControls.BaseDataList
,而不是DataGridView
(这是一个Windows窗体控件)。@Dan,您是对的,关于WinForms grids的数据源对象也是对的。OP需要更新这篇澄清WebForms与WinForms的文章。我把“datagrid视图”误解为datagrid的一般视图。@jwiscarson:当然可以更清楚,但问题确实包括标签datagridview
;我想我们在这里讨论WinForms。同意,和+1。我从来没有提交过这个问题的答案,因为这个问题太让人困惑了,我不知道这篇文章中遗漏了什么细节会导致这个问题,所以你的答案特别有见地。我在DataGridView上没有DataBind()
方法。当我看到另一个解决方案时,我就想到了这一点。我大部分时间都生活在网络世界中,所以我想到了GridView控件。:-)