ここから本文です

DataGridViewの再表示方法について

uor********さん

2009/12/221:21:44

DataGridViewの再表示方法について

現在Visual C# 2005で開発を行っています。

データベースから取得してきたデータをDataGridViewで表示しています。
そのデータをDataGridView上で編集し、更新ボタンを押すことでデータベースにアップデートするプログラムを作っています。

現状、上記のプログラムは作れているのですが、更新ボタンを押したときに、同時にDataGridViewの表示内容も更新したいと考えているのですが、どうにもその方法が分かりません。

知り合いにはDataSetを再取得すれば出来るといわれたのですが、この「再取得」という意味が漠然としていてハッキリと何をすればいいか分からないのです。

BindingSourceなどの設定をしなおすと、選択行が変わったり、チェックボックスのチェックが外れたりと、期待しない動作が起こります。

以上を踏まえて、DataGridViewの即時更新方法をご教授していただければ幸いです

補足DataGridViewには、DBのデータを表示しているだけなのですが、チェックボックス列などを利用して、チェックがついているデータをDBから削除するとします。チェックがついているかどうかなどの判定から、ExecuteNonQueryなどでデータベースのデータを直接変更します。この時、バインドしているDataSetには変更を加えません。
この条件の下、DB更新後にDataGridViewを最新の状態にする方法、と言えば伝わりますでしょうか。

閲覧数:
22,682
回答数:
1

違反報告

ベストアンサーに選ばれた回答

ttkai00さん

編集あり2009/12/309:25:03

普通にバインドしていれば、DataGridView の表示は DataSet の内容に合わせて自動的に更新されます。また、更新する際、DataSet を内容を変更して、TableAdapter(または DbDataAdapter)の Update を呼び出すという順序になると思いますので、更新した後に DataGridView の表示を更新する必要は、普通はないと思います。

ちょっと質問の意図が伝わっていないかも知れません。更新後に DataGridView がどんな状態になっていて、どんな状態に更新したいのか、もう少し詳しく補足できませんか?

なお、更新後にデータベースから最新のデータを取得したいという意味なら、お使いの TableAdapter なり DbDataAdapter の Fill を呼び出せばよいです。

それ以外の意味なら補足をお願いします。

※追記

質問の経緯は理解しました。

結論を言うと、ExecuteNonQuery を使って削除するのが、誤りで、これは本来の方法ではありません。

DataSet を用いる場合は、削除も DataSet 経由で行うのが一般的ですし、DataSet というのはそういう風に設計されています。今回のような状態にしてしまうと、正常な状態に戻すには今の DataSet の内容を全て破棄して、再度データベースから取得するくらいしかないと思います。(Fill メソッド)

ということで削除の方法を変更すればよいです。DataSet の中の DataTable の該当行を Delete メソッドで削除済みとしてマークして、最後に Update メソッドを実行すれば良いです。

DataGridView の行に対して逆順にループして、その行の削除のチェックが入っていたら DataGridViewRow.DataBoundItem を DataRowView にキャストして、その Delete メソッドを呼び出します。これでチェックされた行が削除済みとしてマークされます。(逆順にループするのはループ中に行が削除されるため)

その後、お使いの TableAdapter なり DbDataAdapter の Update メソッドを呼び出します。これで更新できます。ちなみに TableAdapter なり DbDataAdapter の DeleteCommand が設定されている必要があります。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる