以前、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の
カウントを行わないようにしました。
気づけば納得ですが、なかなか分かりにくいミスでした。
コメント (1)
試してないので判りませんが、これってループの終了後にAcceptChangesメソッドをDataTableに対して1回だけ発行することで対処できませんか?
AcceptChangesをヘルプで読んだ限りでは行けそうな気がしてますけど。
投稿者: naka | 2005年06月14日 19:45
日時: 2005年06月14日 19:45