Каков наиболее эффективный способ фильтрации списков на основе выбора другого в C #? - PullRequest
0 голосов
/ 19 декабря 2008

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 декабря 2008

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

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

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

Подключите событие selectedIndexChanged к списку состояний ListBox (в коде инициализации)

 lbStates.SelectedIndexChanged += lbStates_SelectedIndexChanged;

и в событии ListBox States SelectedIndexChanged добавьте тот же код ...

  private void lbStates_SelectedIndexChanged(object sender, event e)
  {
     DataView dvCities = dtCities.DefaultView; 
     dvCities.RowFilter = "State=" + lbStates.SelectedItem;
     lbCities.DataSource = dvCities;
  }
1 голос
/ 19 декабря 2008

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

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

...