- - PR -
Datatableに行を追加、削除(DB登録有り)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-01-27 14:24
私もそうしていますが、最近知ったのが .NET Tipsにある DataRow row = ((DataRowView)e.Item.DataItem).Row; が行けるかもしれない(未確認) | ||||
|
投稿日時: 2005-01-28 19:37
回答ありがとうございます。
ちょっと疑問に思ってるのが、以下のソースで、最初にのせたコード の削除ボタンの処理の一部なのですが、dtのDelete()の前後で出力させた カウントが同じなのです(Delete前後2つの出力文がまったく同じ)。 これが正しいのかわかりませんが、別のシステムで同じようにデータグリッド で追加削除を行っているソースでも同じ出力をさせたら、今度は前後のカウント が違いました。(削除後のdt.Rows.Countが減った) この部分だけ見ると、ソース全体がどうであれ同じ出力が得られるものと思ったの ですが、なぜこれだけのソースで違いが出るのでしょうか? Response.Write(dt.Rows.Count & ":" & e.Item.ItemIndex) dt.Rows(e.Item.ItemIndex).Delete() Response.Write(dt.Rows.Count & ":" & e.Item.ItemIndex) | ||||
|
投稿日時: 2005-01-28 19:44
すいません、先ほどの投稿に追記なのですが、
dt.Rows(・・・).Delete()の前後でデータテーブルのカウントが変わらないのは dtの中身がDBから取得したものを(DataAdapter.Fill(dt)で)バインドして表示、 dt.Rows.Countカウントが減るのはdtの中身をプログラムで固定で作って追加してる 場合です。 違いがあるとすればそれしかないと思ったのですが。 | ||||
|
投稿日時: 2005-01-28 21:07
前に書いたとおり、元々存在するレコードを削除する際にはレコードの状態が Deleted になるけど、追加したレコードを削除する際には実際に削除されるからです。
理由は、DataSet は非同期に行った変更を取得元に反映することを想定しているからです。 取得したレコードを DataSet から削除してしまったら、取得元を削除することができませんよね? 老婆心ながら、DataSet についてもう少しきちんと理解したほうがよいかと思います。 |