Связать большое количество данных со списком?

Я хочу связать список сотрудников в выпадающем списке с функцией автозаполнения, чтобы пользователь мог искать собственное имя. я использовать 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 может иметь что-то вроде этого, которое вы можете использовать.

Удачи.

Ответ 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, текст, который не такой, как вы набрали, исчезнет, ​​но те же остаются там. Это упростит ваш поиск, это ответ.