我刚刚开始在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,行是可编辑的,我不明白为什么
答案 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查询时简化匿名类型定义,但要注意这会创建完全不可变的类型。”