2011-06-22 11 views
1
DataTable dt = new DataTable(); 
DataRow[] dr; 
dt.Columns.Add(); 
dt.Columns.Add(); 
dt.Rows.Add(1, 1); 
dt.Rows.Add(2, 2); 
dt.Rows.Add(3, 3); 
dr = dt.Select(); 
dr[1].Delete(); 
foreach (DataRow x in dt.Rows) 
MessageBox.Show(x[0] + " " + x[1]); 

MessageBoxに「1 1」と「3 3」と表示されます。なぜこうなった?私は、DataTableの値を保持するDataRow []だけを扱うDataTableを操作しませんでした。では、なぜDataTableの値も変更されましたか?誰かがこれを説明できますか?DataTable.Select()を使用している間に起きている奇妙なこと

答えて

0

を削除した後れるAcceptChangesを呼び出す必要がhttp://msdn.microsoft.com/en-us/library/system.data.datatable.acceptchanges.aspx

を見てみましょう:あなたは、DRで選択された行への参照を取得している

dt.AcceptChanges(); 
+0

DataTableを元の値に戻すようにAcceptChangesを使用しています...ありがとう:) – Gerald

+0

@Gerald、AcceptChangesはこれをしません。この回答はあなたの質問には実際には当てはまりません。 –

+0

はい、申し訳ありません。質問を完全に読まなかった。 –

2

を、彼らはコピーではありません。 1つを削除すると、dt.rowsとdrから消えてしまいます。

+0

ありがとうたくさん:) – Gerald

0

drは、DataTable dtの行を実際に参照します。それが削除された理由です。

+1

ありがとう:)私は値がDataRow []にコピーされたと思った。 – Gerald

関連する問題