- PR -

Datatableに行を追加、削除(DB登録有り)

投稿者投稿内容
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-01-27 14:24
引用:

うちではプライマリキーの値を取得してそれに基づいて
データテーブルの行を新規・変更・削除をかけて
データグリッド外のボタンでデータテーブルの内容を
データベースに反映していますが、うまく動作しています。



私もそうしていますが、最近知ったのが
.NET Tipsにある
DataRow row = ((DataRowView)e.Item.DataItem).Row;
が行けるかもしれない(未確認)
ax
常連さん
会議室デビュー日: 2004/04/07
投稿数: 34
お住まい・勤務地: 東京
投稿日時: 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)
ax
常連さん
会議室デビュー日: 2004/04/07
投稿数: 34
お住まい・勤務地: 東京
投稿日時: 2005-01-28 19:44
すいません、先ほどの投稿に追記なのですが、
dt.Rows(・・・).Delete()の前後でデータテーブルのカウントが変わらないのは
dtの中身がDBから取得したものを(DataAdapter.Fill(dt)で)バインドして表示、
dt.Rows.Countカウントが減るのはdtの中身をプログラムで固定で作って追加してる
場合です。
違いがあるとすればそれしかないと思ったのですが。
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-01-28 21:07
前に書いたとおり、元々存在するレコードを削除する際にはレコードの状態が Deleted になるけど、追加したレコードを削除する際には実際に削除されるからです。
理由は、DataSet は非同期に行った変更を取得元に反映することを想定しているからです。
取得したレコードを DataSet から削除してしまったら、取得元を削除することができませんよね?

老婆心ながら、DataSet についてもう少しきちんと理解したほうがよいかと思います。

スキルアップ/キャリアアップ(JOB@IT)