Связать большое количество данных со списком?
Я хочу связать список сотрудников в выпадающем списке с функцией автозаполнения, чтобы пользователь мог искать собственное имя. я использовать RadComboBox
У меня две основные проблемы:
1- Список настолько велик в отношении 5000
item.so, связывающего это большое количество данных в браузере, заставляя его зависать или так медленно (проблема с производительностью)
Согласно документации Telerik
Установите источник данных в RadComboBox. Используйте либо DataSourceID, либо DataSource для этого и установите DataTextField и DataValueField для соответствующих полей в источнике данных. (Обратите внимание, что при использовании DataSource вы должны установить свойство на каждом postback, наиболее удобно в Page_Init.) Set EnableAutomaticLoadOnDemand - true.
поэтому я должен вызывать следующий метод каждый раз в Page_Init
!!!
protected void BindInnerInstructors()
{
ddl_inner_sup.Items.Clear();
ddl_inner_sup.DataSource = Utilities.GetAllInnerInstructors();
ddl_inner_sup.DataValueField = "emp_num";
ddl_inner_sup.DataTextField = "name";
ddl_inner_sup.DataBind();
}
2- Ссылка на объект не установлена в экземпляр объекта при попытке установить выбор поля со списком.
я преодолею эту проблему через .
У меня есть о 4
dropdowlists, но каждый из них должен привязываться в соответствии с событием, но мне нужно связать их все в Page_Init
.
Буду признателен за подробный ответ на эту проблему.
Ответы
Ответ 1
у моей компании была аналогичная проблема. мы закончили использование объекта jquery под названием Select2, и мы lazy загрузили список. В основном мы загружаем только первые 10 или около того во время загрузки, что ускоряет загрузку, и если пользователь прокручивается мимо первых 10, мы загружаем следующие 10 и так далее. Select2 имеет функцию поиска, которая попадает на сервер, чтобы вернуть пользовательский список на основе поиска.
проблема с загрузкой 5000 элементов сразу заключается в том, что браузер будет навсегда загружать их, проходить через них и манипулировать ими по мере необходимости. Я не говорю "вы должны использовать select2". RadComboBox может иметь что-то вроде этого, которое вы можете использовать.
Удачи.
Ответ 2
У меня была такая же проблема в radcombobox. Наконец, я получил решение и опубликовал в своем блоге компании.
Обратитесь к следующей ссылке.
http://elintsys.co.in/blogs/post/2013/06/07/RAD-Combo-box-text-search-browser-uses-100-CPU
Я думаю, это поможет вам. Приветствия
Ответ 3
Я не рекомендую показывать набор данных, но вместо этого сохраняю его в объекте javascript. Затем вы можете выполнить автозаполнение с этим списком объектов. Это делается с помощью jquery, используя селектор, а затем с помощью функции auto complete.
Пример:
var systems = [{t:"hi",s:"something"}.{t:"hi",s:"something"},{t:"hi",s:"something"}];
$("#s").autocomplete(systems,
{
width: 300,
formatItem: function(item)
{ return item.t + item.s; },
formatResult: function(item)
{ return item.t; }
});
Ответ 4
Я также встретил аналогичный сценарий, когда очень большое количество значений было привязано к выпадающему списку. Последняя версия chrome, firefox и IE смогла связать это, но это тоже занимает около минуты, но для более старой версии script зависает и никогда не работает.
Вместо использования какого-либо настраиваемого элемента управления или телекс-рада, мы используем простой подход.
Мы берем размер страницы как настраиваемое значение (например, 50) и номер страницы (по умолчанию 1), количество страниц (общий счет/размер страницы ) и критерии поиска (пользовательский ввод для автозаполнения) в качестве параметра для возвращаемого значения службы и выборки только записей, равных размеру страницы в соответствии с критериями входного поиска и номером страницы.
Возьмите текстовое поле и привяжите этот вызов службы к событию смены текста текстового поля и привяжите вывод к выпадающему списку автозаполнения.
Логика для поискового вызова и поиска реализована в хранимой процедуре, например Сохраненная процедура, имеющая сортировку, пейджинг и фильтрацию
Это было легко, быстро и в значительной степени поддерживаемо, чем любой пейджинг на стороне клиента, привязка и т.д.
Ответ 5
Выпадающий список не подходит для полного списка сотрудников. Кому-то нужно переосмыслить дизайн.
Ответ 6
Используйте VirtualizingStackPanel как ItemsPanel для ваших RadComboBoxes, если есть большое количество элементов для отображения.
С VirtualizationStackPanel вы можете иметь десять тысяч единиц в вашем RadComboBox.
Используйте этот XAML-код:
<!-- WPF ItemsControls like ComboBox, ListBox or Menu use a StackPanel as their internal layout panel.
Use a VirtualizingStackPanel for performance. Else the Combobox will freeze! -->
<ItemsPanelTemplate x:Key="itemsPanelTemplate">
<VirtualizingStackPanel />
</ItemsPanelTemplate>
<!-- This style specifies how RadComboBoxes look like -->
<Style TargetType="telerik:RadComboBox">
<Setter Property="ItemsPanel" Value="{StaticResource itemsPanelTemplate}"/>
</Style>
Ответ 7
Для простоты u просто добавьте первые 15 или 20 имен и когда пользователь вводит в combobox, заполните combobox с возвращенными именами из базы данных, но не все, заполните его всего несколькими именами, чтобы браузер не зависел...
Ответ 8
Вы можете сделать то же самое, что и Google. Когда вы пишете что-то в google, текст, который не такой, как вы набрали, исчезнет, но те же остаются там. Это упростит ваш поиск, это ответ.