2005.06.14

DataTableの行データ削除について

以前、DataTableの行データをDataTableのIndexのループで
削除するといったコードを書きました。

コードで書くと以下になります。
(IF文の条件は適当です。dsはDataSetの事です。)

 --コード開始--
 For i1 as integer = 0 to ds.Tables(0).Rows.Count -1
  If Not = ds.Tables(0).Rows(i1).Item("テスト") = "AAA" Then
   ds.Tables(0).Rows(i1).Delete()
   ds.Tables(0).Rows(i1).AcceptChanges()
  End
 Next
 --コード終了--

このコードで指定した条件の行をDataTableから削除できると思っていたの
ですが、実際に実行すると『位置○に行がありません。』とエラーが出てしまいます。

一瞬、なぜ?どうして?と困ってしまったのですが、しばらくして気がつきました。
なるほど、DataTableから行を削除しているのだから、当然そのIndex番号も同時に
変化するわけですね(1行削除で1減る)。

この対処として、もう一つIndexカウント用の変数を用意し、行を削除した場合はIndexの
カウントを行わないようにしました。

気づけば納得ですが、なかなか分かりにくいミスでした。

トラックバック

このエントリーのトラックバックURL:
http://www.ilovex.co.jp/scripts/intra/mt/mt-tb.cgi/607

コメント (1)

naka:

試してないので判りませんが、これってループの終了後にAcceptChangesメソッドをDataTableに対して1回だけ発行することで対処できませんか?
AcceptChangesをヘルプで読んだ限りでは行けそうな気がしてますけど。

コメントを投稿

photo
saito