0

個別のストアド プロシージャから各データを取得するリストボックスがいくつかあります。

ユーザーが 1 つのリストボックスでオプションを選択すると、他のリストボックスをフィルタリングする必要があります。

ストアド プロシージャにロジックを追加することで以前にこれを行ったことがありますが、非常に長くなることがあります。

これにアプローチするより良い方法を知っている人はいますか?

私が今セットアップした方法は、ListBox ごとに、データベース内のストアド プロシージャを呼び出してリストボックスにデータを入力するメソッドを呼び出す ObjectDataSource を用意することです。

4

2 に答える 2

2

Listbox を ADO.Net データテーブルに直接バインドする代わりに、DataView にバインドするようにコードを変更してみてください。DataViews は、基になっている基になる DataTable から独立して並べ替えおよびフィルター処理できます...

LBStates が州の ListBox で、lbCities が City ListBox で、dtCities がフォーム レベルの DataTable 変数で、その中にすべての都市があり、State 列があるとします...

     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;

selectedIndexChanged イベントを States ListBox に接続します (初期化コード内)。

 lbStates.SelectedIndexChanged += lbStates_SelectedIndexChanged;

States ListBox SelectedIndexChanged イベントで、同じコードを追加します...

  private void lbStates_SelectedIndexChanged(object sender, event e)
  {
     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;
  }
于 2008-12-19T16:13:22.150 に答える
1

リストボックスは、頻繁に変更されることのない「ルックアップ」データを表示するためによく使用されます。エンティティの状態またはタイプのリストのように。したがって、効率を改善しようとするときに検討すべきことの 1 つは、キャッシングです。州のリストを取得するたびにデータベースを往復する必要はありません。

さらに、単一のデータベース呼び出しですべてのリストボックス データを返し、厳密に型指定されたデータセットに格納する場合があります。次に、リストボックスの選択に基づいてデータセットの内容をフィルタリングし、データセットの内容を他のリストボックスに再バインドできます。

于 2008-12-19T16:13:36.223 に答える