- PR -

dataGridでdataBind後に任意の行のデータ変更させたい

1
投稿者投稿内容
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-09-04 23:09
いくつか書き込みをさせてもらい、回答をいただき勉強させてもらってます。教えてくださる方、ありがとうございます。また、問題が出てきましたので書き込みさせていただきます。


1.データベースを検索して、結果をdataGridに表示します。
2.表示された、任意の行をクリックして、選択した行のデータを取得します
3.取得したデータに対し、更新をかけます。
4.更新後、再度データベースを検索して、結果をdataGridに表示させます
5.選択した任意の行のデータが変わっていることがわかる

以上が、基本的な更新検索処理と考えております。
ただこの場合だと、条件によっては更新後に選択した行が消えている場合があります(更新項目に検索条件が入っている場合)。仕様では、更新したデータを印刷しなければならないので、再度自分が更新したデータを検索するという手間がかかります。

そのため、5番目の再度のデータベースを検索を行わず、データセットにある更新前のデータからDataBindを行い、更新前のGridを残すようにしました。

しかしながらこの場合、更新前のデータのため選択した行に表示されているデータは更新前のものです。実際には更新されていても、見ると更新されていないように見えるので問題になります。

そこで(前置きが長くなりすいません^^;)選択していた任意の行だけは、更新後のデータに置き換える必要があります。
データを置き換えるには、更新していないデータセット、DataBind後のdataGrid、もしくはdataViewがあると考えました。

dataBind後であれば

e.Item.Cells[3].Text 

などとして任意の列の変更ができますが、この場合は全ての行が変更されてしまいます。


なので、任意の行の任意の列の項目を変更する方法を教えていただきたいです。
 この場合、どの場所で変更するのか(データセットやビュー、グリッドなど)
      どのような関数を使うのか
      似たようなサンプルのありか
 を教えていただけると助かります。

以上、よろしくお願いいたします。
ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-05 00:19
[DataGrid名].Items[index].Cells[index].Text = "データ";
でできます。indexは適宜調整してください。
でも、ページングしていてページ遷移する際にDBを再検索すると、
最初に表示した時と件数が変わって、2ページ目の1行目に表示されるはずだった
データが1ページ目最後尾にずれちゃいますね。
たけくん
ベテラン
会議室デビュー日: 2003/08/19
投稿数: 63
投稿日時: 2003-09-05 11:52
ぴでさん、早速のご返答ありがとうございます。無事、変更することができました。

しかしながら、ほかに大きな問題があることに気づきました。
この場合、更新後には確かに更新前のとって置いたデータに
[DataGrid名].Items[index].Cells[index].Text = "データ";
で変更して、任意の行だけ更新後のデータに変更することができますが、たとえばページングして戻ってみると、更新前のデータに戻っている状態になります。

つまり、この方法だと、ほかの項目を更新したり、ページングしたりすると、更新した項目のデータが元に戻って更新していないように見えてしまいます。

そこで、思ったのですが、DataBindではデータセットにあるデータを取ってくるわけならば、データセットにあるデータを変更することなどはできるのでしょうか。
もしそれができれば、とってくるデータが変わるわけなので、上記のような問題は起こらないかと考えた次第です。

ぴで
大ベテラン
会議室デビュー日: 2002/10/10
投稿数: 123
お住まい・勤務地: 東京
投稿日時: 2003-09-05 16:33
> 1.データベースを検索して、結果をdataGridに表示します。
> 2.表示された、任意の行をクリックして、選択した行のデータを取得します
> 3.取得したデータに対し、更新をかけます。
           ↑
ここでデータを更新してるから、ページングして戻ってきた時に
データを再検索しているなら、最新のデータが表示されるんじゃないですか?

データの更新が頻繁に発生するようなテーブルに対する検索において、
クライアント側で検索後のデータ一貫性を保ちたい時は、
私は、DataSetをシリアライズしてWebサーバ上に保持しておき、
ページング時にはDBを検索せずに、シリアライズしたDataSetを使って表示しています。

このようにしてDBとは別にデータを保持しておけば、
目指されているようなことができる(?)と思いますが、
DBと同期がとれていないデータを操作することによる問題もあるため、
仕様をきっちり決める必要があると思います。
1

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