C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■91991 / 5階層)  コンボボックスによる絞り込み
□投稿者/ 魔界の仮面弁士 (2307回)-(2019/08/16(Fri) 10:24:30)
2019/08/16(Fri) 11:16:45 編集(投稿者)

No91988 (たかし さん) に返信
> >退職者(過去データ)や入社予定者(未来データ)も出力するとしたら、
> >部署の統合・分割・廃止・名称変更については、どのように表現されるのでしょうか?
> そうなんです。そこが問題でまだ解決していないのです。

一例として:

たとえば、部署マスタが年度単位で刷新されるような場合、
「対象年度」を入れる入力欄を設けておき(既定値は今年度)、
その年度分の部署一覧を ComboBox1 にロードするような設計にすることがあります。

年度途中での入れ替わりがある場合や、
部署間の人事異動や、退職後の再任用も追跡するようなケースでは、
「対象年月日」を範囲指定する設計にする事もあります。


> Accessのサブフォームのような機能がVBにもあるとよいのですが。
WinForm だと DataRepeater コントロールぐらいですかね。
WPF とか ASP.NET だと、もう少しやりようがありそうですが。

https://blogs.msdn.microsoft.com/vbteamjp/2008/06/06/data-repeater-power-packs-beth-massi/
https://blogs.yahoo.co.jp/yss2216/6161472.html


>> データベースからデータを取得する際の「タイミング」と「取得範囲」も考えておきましょう。
> 流れとしてはComboBox1で部署を選択し、ComboBox2で社員を選択、
> そして社員に関するすべてのデータを呼び出すという感じを考えています。

選択した社員の情報を読み込むのは、Button1_Click あたりに置いといて、
コンボボックスの選択値で読み込めば良いだけなので、そう難しくは無いはず。

問題視しているのはその前。
ComboBox1 に表示するための部署データ群や、
ComboBox2 に表示するための社員データ群を取得する際の話です。


『異動情報が頻繁に更新される』との事でしたので、
SQL Server から、部署名や社員名の一覧を SELECT で読み込むのが、
「どのイベント」で「どの範囲(WHERE条件)」を読み込んでくるのかを
考えておくべきなのかな、と。


Form1_Load 時に全件ロードしておく方法だと、
サーバー側が変更(新規採用、死亡退職、苗字変更、配置部署確定)されても、
ComboBox に表示される情報は、Load 時点のキャッシュデータのままです。

かといって、ComboBox がドロップダウンされた瞬間に データを取り出して
その ComboBox にアイテムを追加する方法では、タイミング的に間に合わないですし。

ComboBox の一覧を再読み込みするためのリロードボタンを用意するという手もありますが、
いずれにせよ、アプリケーション要件次第で変わってきますね。


> 絞り込むタイミングとしてはComboBox2のMouseDownイベントがいいのではないかと。

MouseDown が発生するとは限りませんので、それを前提として
設計するのは避けたほうが良いでしょう。

たとえば、Tab キーによってフォーカス移動してくることもありますよね。
ComboBox がアクティブになっている状態から、
ドロップダウンさせないまま、上下矢印キーで項目が変更されたり、
アイテム名の頭文字を入力して候補を選択したり、
[F4] キーあるいは、[Alt]+[下]キーでドロップダウンされることもあります。


> データを呼び出すタイミングはComboBox.SelectedIndexChanged イベントないしは
> CommandButtonクリックイベントです。

VBA や VB6 などでは CommandButton と呼ばれていましたが、
VB.NET においては、ただの Button です。


SelectedIndxChanged や SelectionChangeCommitted は、
上下キーやマウスホイールなどによる操作により
何度も高速に呼ばれることがある点を考慮しておいてください。


No91945 で ComboBox1 の切り替えで ComboBox2 の内容を入れ替えたときのように、
既に DataSet に取得済みデータ内からの絞込みぐらいなら何とかなるでしょうけれども、
SQL Server からの随時読み込みを SelectedIndexChanged のタイミングで行うというのは、
パフォーマンス上の問題が生じます。


なので個人的には、ComboBox2_SelectedIndexChanged では、
画面上の社員情報の表示をクリアするだけに留めておき、
Button1_Click で ComboBox2.SelectedValue を SQL Server に渡して、
社員情報を読み込みさせる方法を提案しておきます。
ボタンがあると、同じ条件で「再読み込み」する場合にも便利ですし。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[4]: コンボボックスによる絞り込み /たかし 返信無し
 
上記関連ツリー

コンボボックスによる絞り込み / たかし (19/08/12(Mon) 18:23) #91943
Re[1]: コンボボックスによる絞り込み / 魔界の仮面弁士 (19/08/12(Mon) 23:30) #91945
  └ Re[2]: コンボボックスによる絞り込み / たかし (19/08/15(Thu) 15:44) #91972
    ├ Re[3]: コンボボックスによる絞り込み / WebSurfer (19/08/15(Thu) 16:48) #91974
    └ Re[3]: コンボボックスによる絞り込み / 魔界の仮面弁士 (19/08/15(Thu) 16:45) #91973
      └ Re[4]: コンボボックスによる絞り込み / たかし (19/08/16(Fri) 09:06) #91988
        ├ コンボボックスによる絞り込み / 魔界の仮面弁士 (19/08/16(Fri) 10:24) #91991 ←Now
        ├ Re[5]: コンボボックスによる絞り込み / WebSurfer (19/08/16(Fri) 10:15) #91989
        ├ Re[5]: コンボボックスによる絞り込み / WebSurfer (19/08/16(Fri) 10:21) #91990
        ├ Re[5]: コンボボックスによる絞り込み / WebSurfer (19/08/16(Fri) 12:20) #91999
        │└ Re[6]: コンボボックスによる絞り込み / WebSurfer (19/08/16(Fri) 12:40) #92001
        │  └ Re[7]: コンボボックスによる絞り込み / たかし (19/08/16(Fri) 19:30) #92005
        │    ├ Re[8]: コンボボックスによる絞り込み / たかし (19/08/17(Sat) 08:04) #92006
        │    └ Re[8]: コンボボックスによる絞り込み / WebSurfer (19/08/17(Sat) 10:43) #92007
        │      └ Re[9]: コンボボックスによる絞り込み / たかし (19/08/18(Sun) 09:13) #92018
        │        ├ Re[10]: コンボボックスによる絞り込み / WebSurfer (19/08/18(Sun) 10:22) #92019
        │        ├ Re[10]: コンボボックスによる絞り込み / WebSurfer (19/08/18(Sun) 10:55) #92020
        │        └ Re[10]: コンボボックスによる絞り込み / WebSurfer (19/08/18(Sun) 11:45) #92021
        │          └ Re[11]: コンボボックスによる絞り込み / たかし (19/08/18(Sun) 15:57) #92022
        │            ├ Re[12]: コンボボックスによる絞り込み / たかし (19/08/18(Sun) 16:36) #92023
        │            └ Re[12]: コンボボックスによる絞り込み / WebSurfer (19/08/18(Sun) 18:16) #92024
        │              └ Re[13]: コンボボックスによる絞り込み / たかし (19/08/18(Sun) 19:03) #92025
        │                ├ Re[14]: コンボボックスによる絞り込み / WebSurfer (19/08/18(Sun) 22:14) #92031
        │                │└ Re[15]: コンボボックスによる絞り込み / たかし (19/08/19(Mon) 17:05) #92036
        │                │  └ Re[16]: コンボボックスによる絞り込み / WebSurfer (19/08/19(Mon) 18:36) #92037
        │                └ Re[14]: コンボボックスによる絞り込み / WebSurfer (19/08/22(Thu) 15:02) #92065
        └ Re[5]: コンボボックスによる絞り込み / 大谷刑部 (19/08/20(Tue) 10:01) #92040
          └ Re[6]: コンボボックスによる絞り込み / たかし (19/09/15(Sun) 15:38) #92368 解決済み
            └ Re[7]: コンボボックスによる絞り込み / WebSurfer (19/09/15(Sun) 22:37) #92369
              └ Re[8]: コンボボックスによる絞り込み / たかし (19/09/16(Mon) 20:15) #92372
                ├ Re[9]: コンボボックスによる絞り込み / WebSurfer (19/09/16(Mon) 20:59) #92373
                │└ Re[10]: コンボボックスによる絞り込み / キングダム (19/09/16(Mon) 21:31) #92374
                │  ├ Re[11]: コンボボックスによる絞り込み / キングダム (19/09/16(Mon) 21:33) #92375
                │  └ Re[11]: コンボボックスによる絞り込み / 大谷刑部 (19/09/17(Tue) 12:40) #92380 解決済み
                └ Re[9]: コンボボックスによる絞り込み / WebSurfer (19/09/19(Thu) 20:26) #92392

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信