0

Linq Data「オブジェクトリスト」にバインドされたグリッドで作業しています。

グリッドは「切断された方法」で動作します。これは、行を編集または抑制しても、変更がデータベースにすぐに送信されないことを意味します。DataContext.SubmitChanges メソッドを呼び出すためにすべての変更が行われた後にクリックされる別の「保存」ボタンがあります。

問題は、グリッド内の行を削除すると、deleteonsubmit メソッドが適切に呼び出されますが、直後にグリッドを再バインドすると、行はまだここにあります!

データテーブルがグリッドにバインドされている場合、削除状態の行が表示されないデータテーブルのような動作が必要です。これは可能ですか?

補遺

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 に答える