绑定Linq To Entities查询结果到datagridview

时间:2010-03-17 07:54:57

标签: linq-to-entities

我刚刚开始在Linform中使用Windows窗体应用程序中的实体,但我并不理解一种看起来如此简单的行为。

如果我输入以下代码,我会在dataGridView中获取ReadOnly记录

Dim x = From n in Table1 _
        Select n.FirstName, n.LastName, N.Department
DataGridView1.DataSource = x 

但是如果我输入以下代码,我会在dataGridView中获得可编辑的行

Dim x = From n in Table1 _
        Select n
DataGridView1.DataSource = x

所以,基本上如果我指定要选择的列名和数据绑定到我的DataGridView1,行是只读的,但如果我没有指定列名和数据绑定到DataGridView,行是可编辑的,我不明白为什么

1 个答案:

答案 0 :(得分:1)

an MSDN article这个。

经过一番搜索和大量编辑我的答案后,罪魁祸首似乎必须是anonymous types。文档指出匿名类型的非键字段应该是读写的,但您可能正在调用此规则的某种异常。我会调试并检查两种情况下x的确切类型。

this blog entry by someone还有另一个可能的暗示。 “LINQ查询表达式将在将要生成密钥的任何情况下自动使用密钥字段(例如,分组依据),[...]”可能是使用Select方法创建的字段是自动关键属性。

另外Stackoverflow answer提示 - 它们通过将Key放在另一种类型的字段上来匹配Select方法调用的某些结果的类型。

编辑:this article(谢谢,Greg Stuntz)出来并说出来。 Geez。“你可以通过省略New With和{}来编写LINQ查询时简化匿名类型定义,但要注意这会创建完全不可变的类型。”

相关问题