2013-05-26 13 views
12

Chcę listę pracowników wiążą się listy rozwijanej z funkcji autouzupełniania, dzięki czemu użytkownik może wyszukiwać prawidłowa nazwa .I korzystać RadComboBoxPowiąż dużą liczbę danych z comboboxem?

Mam dwa główne problemy:

1- lista jest tak duża, o 5000 item.so wiążący tę dużą ilość danych w przeglądarce uczynić go powiesić lub tak powolny. (kwestia wydajności)

według dokumentacji Telerik

Określ źródło danych do RadComboBox. W tym celu należy użyć właściwości DataSourceID lub DataSourceID i ustawić właściwości DataTextField i DataValueField dla odpowiednich pól w źródle danych. (Należy pamiętać, że podczas korzystania z DataSource należy ustawić właściwość na każdym odświeżeniu strony , najwygodniej w Page_Init.) Ustaw EnableAutomaticLoadOnDemand na true.

więc muszę zadzwonić do następującej metody za każdym razem w 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- obiekt odniesienia nie jest ustawiony na przykład przedmiotu, gdy próbuje potwierdzić wybór pola kombi.

Rozwiązuję ten problem przez this.


mam około 4 dropdowlists ale każdy musi wiązać się w zależności od zdarzenia, ale mam powiązać je wszystkie w page_init.

Będę wdzięczny za szczegółową odpowiedź na ten problem.

+1

można znaleźć szczegółowe odpowiedzi tutaj: http://demos.telerik.com/aspnet-ajax/combobox/examples/loadondemand/wcf/defaultcs.aspx?# qsf-demo-source –

+0

@YuriyRozhovetskiy: wielkie dzięki, ale chcę wiedzieć kiedy combobox wiąże, jeśli chcę, żeby pole kombi wiązało dane tylko w konkretnym wydarzeniu, aby zwiększyć wydajność? –

Odpowiedz

8

moja firma miała podobny problem. skończyło się na używaniu obiektu jquery o nazwie Select2 i leniwie wczytaliśmy listę. Zasadniczo ładujemy tylko pierwszych 10 w czasie ładowania, dzięki czemu ładowanie jest szybkie, a jeśli użytkownik przewinie w dół po pierwszych 10, załadujemy następne 10 i tak dalej. Select2 ma funkcję wyszukiwania, która uderza serwer, aby zwrócić niestandardową listę na podstawie wyszukiwania.

Problem z ładowaniem 5000 elementów naraz polega na tym, że przeglądarka pobierze je na zawsze, przetworzy je i zmanipuluje w razie potrzeby. Nie mówię "musisz użyć select2" RadComboBox może mieć coś takiego, czego możesz użyć.

Powodzenia.

+0

Czy możesz dać mi przykładowy kod w .net proszę? Jak traktujesz tę kontrolę? –

+1

Nie jestem w stanie podać przykładu niestety. w .Net stworzysz metodę ładowania wymaganych danych. Musisz wykonać trochę badań dotyczących stronicowania. Jest to po prostu pomysł wzięcia dużego zbioru danych i przesłania go w mniejszych, zarządzalnych fragmentach. Te dane będą musiały być ładowane za pomocą javascript/jquery.Będziesz musiał utworzyć zdarzenie, które po przewinięciu osoby na dół listy spowoduje załadowanie następnej strony danych. Jeśli ktoś czegoś szuka, potrzebujesz innego połączenia .net, które zwróci dane wyszukiwania. –

+0

Znalazłem to z małym wyszukiwaniem google. To może być przydatne. http://www.telerik.com/community/code-library/aspnet-ajax/combobox/pages-in-radcombobox-load-on-demand.aspx –

0

Dla uproszczenia u po prostu dodać pierwszych 15 lub 20 nazw i gdy użytkownik wpisze na combobox, wypełnić combobox z zwróconych nazwisk z bazy danych, ale nie wszystkie, napełnić go zaledwie kilka nazwisk tylko więc przeglądarka nie będzie wisiał ...

1

Nie polecam wyświetlania zestawu danych, ale przechowywanie go w obiekcie javascript. Następnie można wykonać autouzupełnianie z tą listą obiektów. Odbywa się to za pomocą jquery, za pomocą selektora, a następnie za pomocą funkcji automatycznego uzupełniania.

Przykład:

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

Chciałem dodać komentarz, do którego część formatItem jest używana w twoim liście rozwijanym, ma sformatowany ciąg znaków, jak kolorowe przęsła, itp. Lub dowolny rodzaj CSS/dodatkowych informacji, ale formatitem jest tym, co zostanie zapisane w pudełku. – Fallenreaper

0

Można zrobić to samo, co robi Google. Gdy piszesz coś w Google, tekst, który nie jest taki sam, jak wpisałeś, zniknie, ale te same pozostaną tam. Ułatwi to wyszukiwanie, oto odpowiedź.

1

Spotkałem się również z podobnym scenariuszem, w którym bardzo duża liczba wartości była powiązana z listą rozwijaną. Najnowsza wersja chrome, firefox i IE była w stanie to powiązać, ale to też zajęło około minut, ale dla starszych wersji skrypt zawiesza się & nigdy nie działa.

Zamiast używać niestandardowych kontrolek lub telerików, używamy prostego podejścia. Bierzemy strona rozmiarze wartość jako konfigurowalne (powiedzmy 50) i numer strony (domyślnie 1), liczba stron (całkowita liczba/rozmiaru strony) i kryteriom (wejście użytkownika dla auto-complete) jako parametr zwracanej wartości usługi i pobierz tylko rekordy odpowiadające rozmiarowi strony zgodnie z wejściowym kryterium wyszukiwania: &.

Weź pole tekstowe & powiązanie tego zgłoszenia serwisowego ze zdarzeniem zmiany tekstu w polu tekstowym & powiązanie danych wyjściowych z rozwijanym autouzupełnianiem.

Logika dla stronicowania & wyszukiwania jest realizowany w procedurze przechowywanej jak Stored Procedure having Sorting, Paging and Filtering

Był to łatwy, szybki i dość dużo w utrzymaniu niż po stronie klienta stronicowania, wiązania itd listy

1

rozwijanej nie jest dobrze nadaje się do pełnej listy pracowników. Ktoś musi przemyśleć projekt.

1

Użyj VirtualizingStackPanel jako ItemsPanel dla RadComboBox, jeśli istnieje duża liczba elementów do wyświetlenia. Z VirtualizingStackPanel możesz mieć dziesięć tysięcy elementów w swoim RadComboBox.

Użyj tego kod 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> 
Powiązane problemy