Каков наиболее эффективный способ фильтрации списков на основе выбора другого в С#?

У меня есть несколько списков, каждый из которых получает данные из отдельной хранимой процедуры.

Если пользователь выбирает параметр в 1 списке, он должен фильтровать другие списки.

Я делал это раньше, добавляя логику к хранимой процедуре, но иногда кажется, что это очень долго.

Кто-нибудь знает, как лучше подойти к этому?

То, как я это настроил сейчас, заключается в том, что для каждого ListBox у меня есть ObjectDataSource, который вызывает метод, который вызывает сохраненный процесс в базе данных для заполнения списка.


person Xaisoft    schedule 19.12.2008    source источник


Ответы (2)


Вы можете попробовать изменить код, чтобы вместо привязки Listbox напрямую к таблице данных ADO.Net он привязывался к DataView. DataViews можно сортировать и фильтровать независимо от базовой DataTable, на которой они основаны...

Предположим, что LBStates — это ListBox состояния, а lbCities — это ListBox City, а dtCities — это переменная DataTable уровня формы со всеми городами в ней, и она имеет столбец State...

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

Подключите событие selectedIndexChanged к элементу управления 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;
  }
person Charles Bretana    schedule 19.12.2008
comment
Чарльз, можете ли вы привести пример со списком, который содержит, например, штаты и города. - person Xaisoft; 19.12.2008
comment
Я не понимаю, в каком году спрашиваешь... Что ты имеешь в виду штаты И города? Вы имеете в виду Города с дополнительной колонкой для состояния, в котором находится город? или со штатами и городами, перемешанными вместе? каждый как отдельный предмет? - person Charles Bretana; 19.12.2008
comment
или вы имеете в виду поле списка городов, которое фильтрует на основе выбора пользователем штата в другом списке, содержащем только штаты? - person Charles Bretana; 19.12.2008
comment
Один список для штатов и один список для городов. Когда вы выбираете штат, он показывает только города для выбранного штата. - person Xaisoft; 19.12.2008
comment
Хорошо, я понимаю, но что, если в моей таблице Cities нет State Coumn? - person Xaisoft; 19.12.2008
comment
Как вы можете отфильтровать список городов, чтобы отображались только те города в выбранном штате, если вы не можете определить, в каком штате находится город? - person Charles Bretana; 19.12.2008
comment
Я смотрел на это с точки зрения вызова хранимой процедуры для городов и передачи состояния и возврата таблицы данных, но, может быть, ваш способ лучше? - person Xaisoft; 22.12.2008

Списки часто используются для отображения данных «поиска», которые не часто меняются. Например, список состояний или типов сущностей. Таким образом, при попытке повысить эффективность следует обратить внимание на кэширование. Нет причин обращаться к базе данных каждый раз, когда вы хотите получить список состояний.

Кроме того, если вы хотите вернуть все данные списка в одном вызове базы данных и сохранить в строго типизированном наборе данных. Затем вы можете отфильтровать содержимое набора данных на основе выбора списка и просто повторно привязать содержимое набора данных к другим спискам.

person Kon    schedule 19.12.2008