我对这个问题感到十分困惑。我一直在寻找一段时间,仍然没有解决问题的答案。
我运行一个查询,我尝试在其中设置值。问题是如果我没有指定read only
,它们会变成Select New With
个变量。当我指定Select New With
时,它不会更新数据库。下面列出了一些代码。
我的目标是让射手更新会更新数据库的DataGridView
。我在StackOverflow的另一个问题中告诉我,DataGridView
不会仅仅通过用户输入数据来更新数据库。所以我创建了一个更新按钮,它运行下面列出的代码。
代码:
使用Select New With
查询允许我编辑变量,但不会提交数据库:
Dim query = From t In db.Trophies _
Select New With {t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed}
查询不会让我编辑变量。错误消息显示“Property'TrophyName'是'ReadOnly':
Dim query = From t In db.Trophies _
Select t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed
我想要更新结果的代码:
Dim i as integer = 0
For Each result In query
result.WinnerId = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("WinnerId").Index).Value
result.Name = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Name").Index).Value
result.Score = dgvTrophies.Rows(i).Cells(dgvTrophies.Columns("Score").Index).Value
db.SubmitChanges()
i += 1
Next
表:
PRIMARY KEY TrophyId int auto-increments
TrophyName varchar(50)
WinnerId char(7) Allow Nulls
Name varchar(20) Allow Nulls
Score int Allow Nulls
Printed bit
非常感谢任何建议或答案。
编辑:我已尝试将ObjectTrackingEnabled
设为True
,但未解决此问题。
编辑:要让用户进行更“自动”的更新,用户离开edit mode
DataGridView
我就会调用db.SubmitChanges
来更新数据库,不再需要更新按钮。
答案 0 :(得分:2)
使用Select new with { ...
创建一个匿名对象,对其的更改不会提交给数据库。您需要使用linq实体。例如:
Dim query = From t In db.Trophies _
Select t
或者只是
Dim query = db.Trophies
这将有效。