2013-05-26 6 views
12

Я хочу связать список сотрудников в раскрывающемся списке, с функцией автозаполнения, так что пользователь может искать собственное имя .i использовать RadComboBoxСвязать большое количество данных со списком?

У меня есть две основные проблемы:

1- список настолько велик о 5000 item.so связывания этого большое количество данных в браузере сделать его повесить или очень медленно. (проблема производительности)

Согласно документации Telerik

Установить источник данных в RadComboBox. Для этого используйте либо DataSourceID, либо свойство DataSource , и установите свойства DataTextField и DataValueField в соответствующие поля в источнике данных. (Обратите внимание, что при использовании DataSource вы должны установить свойство для каждой обратной связи , наиболее удобно в Page_Init.) Установите 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- Ссылка на объект не указывает на экземпляр объекта при попытке установить выбор комбинированного окна.

Я преодолеваю эту проблему через this.


У меня есть около 4 dropdowlists, но каждый должен связать в соответствии с событием, но я должен связать их все в page_init.

Буду признателен за подробный ответ на эту проблему.

+1

Вы можете найти подробный ответ здесь: http://demos.telerik.com/aspnet-ajax/combobox/examples/loadondemand/wcf/defaultcs.aspx?# qsf-demo-source –

+0

@YuriyRozhovetskiy: большое спасибо, но я хочу знать, когда привязка combobox связывается, если я хочу, чтобы поле со списком связывало данные только в конкретном случае, чтобы повысить производительность? –

ответ

8

У моей компании была аналогичная проблема. мы закончили использование объекта jquery под названием Select2, и мы lazy загрузили список. В основном мы загружаем только первые 10 или около того во время загрузки, что ускоряет загрузку, и если пользователь прокручивается мимо первых 10, мы загружаем следующие 10 и так далее. Функция Select2 имеет функцию поиска, которая обращается к серверу, чтобы вернуть пользовательский список на основе поиска.

проблема с загрузкой 5000 элементов сразу - это то, что браузер будет навсегда загружать их, проходить через них и манипулировать ими по мере необходимости. Я не говорю «вы должны использовать select2». RadComboBox может иметь что-то вроде этого, которое вы можете использовать.

Удачи.

+0

Не могли бы вы дать мне пример кода в .net, пожалуйста? Как вы относитесь к этому контролю? –

+1

им не в состоянии привести пример, к сожалению. в .Net вы создадите метод для загрузки необходимых данных. Вам нужно будет сделать небольшое исследование по поисковому запросу. Это просто идея взять большой набор данных и отправить его в меньшие управляемые куски. Эти данные необходимо загрузить через javascript/jquery.Вам нужно будет создать событие, которое, когда человек прокручивается в нижней части списка, затем загружает следующую страницу данных. Если кто-то ищет что-то, тогда вам понадобится другой вызов .net, который возвращает данные поиска. –

+0

Я нашел это с небольшим поиском google. Это может быть полезно. http://www.telerik.com/community/code-library/aspnet-ajax/combobox/paging-in-radcombobox-load-on-demand.aspx –

0

Для простоты просто добавьте первые 15 или 20 имен, а когда пользователь вводит в combobox, заполните combobox с возвращенными именами из базы данных, но не все, заполните его только несколькими именами, чтобы браузер не зависал ...

1

Я не рекомендую показывать набор данных, а вместо этого хранить его в объекте 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; } 
}); 
+0

Я хотел добавить комментарий, который используется для части formatItem в вашем выпадающем списке, имеет отформатированную строку, например, цветные интервалы и т. Д., Или любую дополнительную информацию CSS, а также формат, который будет храниться в поле. – Fallenreaper

0

Вы можете сделать то же самое, что делает Google. Когда вы пишете что-то в google, текст, который не такой, как вы набрали, исчезнет, ​​но те же остаются там. Это упростит ваш поиск, это ответ.

1

Я также встретил аналогичный сценарий, в котором очень большое количество значений было привязано к выпадающему списку. Последняя версия chrome, firefox и IE смогла связать это, но это тоже занимает около минуты, но для более старой версии скрипта зависает & никогда не работает.

Вместо использования каких-либо пользовательских элементов управления или телекс-рада, мы используем простой подход. Мы страницу размера, как настраиваемое значение (например, 50) и номер страницы (по умолчанию 1), количество страниц (Общее количество/размер страницы) и критерии поиска (вход пользователя Автозаполнение) как параметр для возвращаемого значения службы и выборки только записей, равных размеру страницы по критериям входного поиска & номер страницы.

Возьмите текстовое поле & свяжите этот вызов службы с текстовым полем текстового поля & привяжите вывод к выпадающему списку автозаполнения.

Логика для подкачки & поиска осуществляется в хранимой процедуре, как Stored Procedure having Sorting, Paging and Filtering

Это было легко, быстро и в значительной степени в обслуживании, чем любой стороне клиента пейджинга, связывание и т.д.

1

выпадающий список не хорошо подходит для полного списка сотрудников. Кому-то нужно переосмыслить дизайн.

1

Используйте 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> 
Смежные вопросы