2

我完全被这个问题难住了。我一直在寻找一段时间,但仍然没有解决问题的答案。

我运行了一个查询,尝试在其中设置值。read only问题是,如果我不指定,它们会作为变量出现Select New With。当我指定Select New With它不会更新数据库。下面列出了一些代码。

我的目标是让射手DataGridView更新数据库。我在 StackOverflow 上的另一个问题中被告知,DataGridView不会仅通过用户输入数据来更新数据库。所以我创建了一个更新按钮,它运行下面列出的代码。

代码:

查询 usingSelect New With允许我编辑变量但不会提交到数据库:

Dim query = From t In db.Trophies _
            Select New With {t.TrophyName, t.WinnerId, t.Name, t.Score, t.Printed}

查询不会让我编辑变量。错误消息显示“属性 '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

任何建议或答案将不胜感激。

编辑:我试过设置ObjectTrackingEnabledTrue但没有解决问题。

编辑:为了让它进行更“自动”的更新,在用户离开edit modeDataGridView调用db.SubmitChanges更新数据库并且不再需要更新按钮之后。

4

1 回答 1

2

使用Select new with { ...创建一个匿名对象,并且对其的更改不会提交到数据库。您需要使用 linq 实体。例如:

Dim query = From t In db.Trophies _
            Select t

或者干脆

Dim query = db.Trophies

那可行。

于 2013-01-21T20:28:08.057 回答