0

我正在使用绑定到 Linq 数据“对象列表”的网格。

网格以“断开连接的方式”运行,这意味着当我编辑或取消一行时,更改不会立即提交到数据库。在进行所有更改后单击一个单独的“保存”按钮以调用 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

@马格纳斯

你没有理解我的问题。单击保存按钮时,我确实调用了 SubmitChanges,并且更改效果很好。问题不在这里。

问题是当我删除网格中的一条线时,deleteonsubmit 方法很好调用,但是当我重新绑定网格后,这条线仍然在这里!通常,即使我尚未将更改提交到数据库,已删除的对象也不应该在 GridView 中显示为一行。

4

1 回答 1

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

这是未经测试的,所以我不确定它是否会工作,但它似乎可以编译。

于 2012-11-23T15:47:27.993 回答