DataRow.Delete() メソッドが呼び出される場合、対応する行の RowState プロパティは DataRowState.Deleted に設定されます。行のステータスが DataRowState.Deleted の場合、通常の状況ではこの行にアクセスできません。削除された元のデータを取得する必要がある場合は、そのエントリ プロパティのオーバーロードされたメソッドを使用して、DataRowVersion.Original パラメーターを渡すことができます。
コードは次のとおりです:
if (typedDataRow.RowState == DataRowState.Deleted) id = (string)typedDataRow["CustomerID", DataRowVersion.Original];
datatable.Rows[i].Delete() を使用して行を削除するか、DataGrid で Del キーを押して行を削除してからテーブルにアクセスします。削除された行を介してアクセスしました。」というエラーが表示されます。理由は次のとおりです。
Delete() の後、完全な削除を確認するには datatable.AccepteChanges() メソッドが必要です。これは、Delete() は対応する列のステータスを削除済みとしてマークするだけであり、datatable を通じてロールバックすることもできるためです。 .RejectChanges() を使用して行の削除を取り消します。
したがって、 datarow を完全に削除したい場合は、 Delete() メソッドと AccepteChanges() メソッドを同時に使用するか、 datatable.Rows.RemoveAt(i) メソッドを使用して を直接削除する必要があります。 i は行インデックスを表し、もう 1 つはデータテーブルです。 Rows.Remove(DataRow dr) は指定された行を削除します。
ただし、datatable.Rows.RemoveAt(i) を使用する場合、datatable.Rows.RemoveAt(0); datatable.Rows.RemoveAt(1); を連続して使用すると、元の行 0 と 1 は削除されないことに注意してください。ただし、0 行を削除すると、元の 1 行は 0 行になるため、datatable.Rows.RemoveAt(1) は実際には元のテーブルの 2 行を削除します。現時点では i = i - 1;
したがって、datatable.Rows.RemoveAt(i) は注意して使用する必要があります
注:
行バージョン (DataRowVersion)
行 (DataRow) オブジェクトには 4 つの異なる行がありますバージョン 、それぞれ、現在、オリジナル、提案、デフォルト。これらの行バージョンについて簡単に説明します。
現在: 行の現在の値を示します。削除された状態の行には行のバージョンが存在しません。
Original: 行の元の値を表します。追加済み状態の行バージョンは存在しません
提案済み: 行の推奨値を示します。この行バージョンは、テーブルに属していない行、つまり分離状態の行に対して存在します。この行バージョンは、編集中の行に対しても存在します。
デフォルト: 行のデフォルトのバージョンを表します。追加、変更、または変更されていない状態の行のデフォルトの行バージョンは最新であり、削除された状態の行のデフォルトの行バージョンはオリジナルです。分離状態の行のデフォルト バージョンが提案されます。
上記は C# Table.Rows[index].Delete() の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。