現在C#とOLEを使ってDataGridViewにmdbファイル(←古いですな!!)のデータベースを表示させています。
DataGridViewからmdbファイルのデータベースを編集する(アップデートコマンドを発行しデータセットの更新を行う)ことはできたのですが
逆のアプローチ(mdbファイルの変更をリアルタイムでDataGridViewへ反映)を行うことができません。
現在行っている方法はタイマーイベントで逐一アダプターのFillを行う方法をとっています。
こちらはDataGridViewのスクロールバーを下げることができませんし、プログラムが重たいです。(たとえC++/CLIで作ったとしても重かったです。)
mdbファイルの変更時にDataGridViewを更新させるにはどうすればいいのか、知恵を貸していただけると幸いです。
【C#】 mdbファイルとDataGridViewについて【Access】
Re: 【C#】 mdbファイルとDataGridViewについて【Access】
C#は使ってないけど、
Fillした後、DataGridViewのDataSourceに再セットするのではないでしょうか。
Fillした後、DataGridViewのDataSourceに再セットするのではないでしょうか。
non
Re: 【C#】 mdbファイルとDataGridViewについて【Access】
まず,変更の監視ですが,サーバーからの通知機構があるRDB (e.g. SQL Server 2005 or later) ならば,それをトリガに変更を受け取ることができますが,OLEにはそのような機構がありません。
なので,タイマーの方法を使うか,別スレッドに分離するか,になります。
更新の前後で選択中のセルを保持するようにしたり,ADO.NETの部分を非同期にすることにより,使い勝手はマシにはなるかと思います。
DataAdapter系にAsyncメソッドもBegin/End系のメソッドもコールバックイベントもないため,別スレッド化しないと非同期になりませんが……。
# UIスレッドでRDBMSへのSQLを発行するのは基本的に悪手です。
なので,タイマーの方法を使うか,別スレッドに分離するか,になります。
更新の前後で選択中のセルを保持するようにしたり,ADO.NETの部分を非同期にすることにより,使い勝手はマシにはなるかと思います。
DataAdapter系にAsyncメソッドもBegin/End系のメソッドもコールバックイベントもないため,別スレッド化しないと非同期になりませんが……。
# UIスレッドでRDBMSへのSQLを発行するのは基本的に悪手です。
Re: 【C#】 mdbファイルとDataGridViewについて【Access】
non様
YuO様
知恵を貸していただきありがとうございました。
とても参考になりました。
タイマーイベントよりもbgWorkのほうが気持ち軽いかな?(主観)と思ったのでbgWorkでモニターしようかなと思います。
YuO様
知恵を貸していただきありがとうございました。
とても参考になりました。
タイマーイベントよりもbgWorkのほうが気持ち軽いかな?(主観)と思ったのでbgWorkでモニターしようかなと思います。
Re: 【C#】 mdbファイルとDataGridViewについて【Access】
FileSystemWatcherは使えませんか?
Re: 【C#】 mdbファイルとDataGridViewについて【Access】
Timer,bgwork,FileSystemWatcherそれぞれを使った感想
・Timer:タイマーイベントが発生するたびに処理落ち発生
・bgwork:スレッドループが回転するたびに処理落ち発生
・FileSysWatcher:ファイルが変更されイベントが発生した時に処理落ち発生。イベント発生はファイルを変更してから4~10秒ほどでした。
もし、検索でここに行きついたとき、参考にしてくれると嬉しいです。(参考になれば^^;)
・Timer:タイマーイベントが発生するたびに処理落ち発生
・bgwork:スレッドループが回転するたびに処理落ち発生
・FileSysWatcher:ファイルが変更されイベントが発生した時に処理落ち発生。イベント発生はファイルを変更してから4~10秒ほどでした。
もし、検索でここに行きついたとき、参考にしてくれると嬉しいです。(参考になれば^^;)