-1

重複の可能性:
エラー: 削除された行の情報には、行からアクセスできません。(C#)

DataSet から行を削除しようとすると、次のエラーが発生します。

行を介して削除された行情報にアクセスすることはできません

これを修正するにはどうすればよいですか。

以下は私の機能です:

    private void btnDelete_Click(object sender, EventArgs e)
    {
       var result =  MessageBox.Show("Proceed to deleting this location?", "Delete Location", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
       if (result == DialogResult.Yes)
       {
            var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
            if (row.RowState != DataRowState.Deleted)
            {
                row.Delete();
                MessageBox.Show("This location has been deleted", "Location Deleted", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
       }
       else
       {
          this.Close();
       }
    }
4

3 に答える 3

0

何をすべきかを理解するには、 MSDN のドキュメントを読む価値があるかもしれませrow.Delete()ん。

行の RowState が Added の場合、RowState は Detached になり、AcceptChanges を呼び出すと行がテーブルから削除されます。

既存の DataRow で Delete メソッドを使用すると、RowState は Deleted になります。AcceptChanges を呼び出すまで、削除されたままになります。この時点で、DataRow はテーブルから削除されます。

削除された行は、RejectChanges を呼び出すことで元に戻すことができます。

そのため、row.Delete()を に変更row.RowStateDataRowState.Deletedます。

行を実際に DataSet から削除したい場合は、 を呼び出す必要がありますrow.AcceptChanges()

于 2012-11-13T15:20:54.453 に答える
0

例外が実際に発生したのは でFindByxar_Id(pRow.xar_Id)あり、後で発生したと想定していますrow.Delete();。DataRow のコピーを作成しましたか、pRowまたはその行も削除されていますか (おそらくカスケード削除制約によって)? xar_Idすでに削除されているため、アクセスできません。

したがって、これも確認してください:

// ...
if(pRow.RowState != DataRowState.Deleted)
{
    var row = myData.xspArea.FindByxar_Id(pRow.xar_Id);
    if (row.RowState != DataRowState.Deleted)
    {
        row.Delete();
        // ...
    }
// ...

データベースを更新する場合は、DataAdapter.

于 2012-11-13T15:20:57.977 に答える
0

mData.AcceptChanges()row.Delete() の後に呼び出す必要があると思います。

編集:

@Tim Schmelterが言うように:rowstate AcceptChangesはdatadapterが行をどうするかを決定するために使用するものであるため、データベースの更新を防ぎます

于 2012-11-13T15:19:10.413 に答える