我正在使用绑定到Linq Data“对象列表”的网格。
网格以“断开连接的方式”运行,这意味着当我编辑或抑制一行时,更改不会立即提交给数据库。在进行所有更改以调用DataContext.SubmitChanges方法后,单击一个单独的“保存”按钮。
问题是当我删除网格中的一行时,deleteonsubmit方法被很好地调用,但是当我刚刚重新绑定网格时,该行仍然在这里!
我需要像Datatables这样的行为,当数据表绑定到网格时,不会显示Deleted状态的行。这可能吗?
没有很多代码,因为GridView使用它的自动行为(AutoGenerateColumns,AutoGenerateEditButton等)
以下是我用来删除对象的代码
<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Sub Supprimer(ByVal code As Integer)
Dim ctx = getDataContext()
Dim leGerant = (From g In ctx.Gerant Where g.CODE = code).FirstOrDefault
ctx.Gerant.DeleteOnSubmit(leGerant)
End Sub
以下是我用来选择对象的代码
<DataObjectMethod(DataObjectMethodType.Select)> _
Public Function Selectionner()
Dim ctx = getDataContext()
Return From g In ctx.Gerant
End Function
@magnus
你不明白我的问题。单击保存按钮时,我会调用SubmitChanges,这些更改生效。问题不在这里。
问题是当我删除网格中的一行时,deleteonsubmit方法被很好地调用,但是当我刚刚重新绑定网格时,该行仍然在这里!通常,删除的对象不应该在GridView中显示为一行,即使我还没有将更改提交到数据库。
答案 0 :(得分:0)
DeleteOnSubmit
没有“删除”该项目。它标志着它将在下次提交时删除。
您需要添加提交行,使其成为:
Dim ctx = getDataContext()
Dim leGerant = (From g In ctx.Gerant Where g.CODE = code).FirstOrDefault
ctx.Gerant.DeleteOnSubmit(leGerant)
ctx.SubmitChanges()
编辑:假设您的两次通话中的ctx都是同一个实例,您可以尝试
<DataObjectMethod(DataObjectMethodType.Select)> _
Public Function Selectionner()
Dim ctx = getDataContext()
Dim deleted = ctx.ObjectStateManager
.GetObjectStateEntries(System.Data.EntityState.Deleted).OfType<Gerant>();
Return (From g In ctx.Gerant).Except(deleted);
End Function
这是未经测试的,所以我不确定它是否会起作用,但它似乎在编译。