2013-05-26 15 views
12

voglio legare elenco di dipendenti in discesa, con funzione di completamento automatico in modo che l'utente può cercare il nome proprio .i utilizzare RadComboBoxAssociare un numero elevato di dati a una casella combinata?

Ho due problemi principali:

1- La lista è così grande su 5000 item.so vincolante questo gran numero di dati nel browser rendono appendere o così lento. (problema di prestazioni)

Secondo la documentazione Telerik

Impostare un'origine dati al RadComboBox. Utilizzare DataSourceID o la proprietà DataSource per eseguire questa operazione e impostare le proprietà DataTextField e DataValueField sui rispettivi campi nell'origine dati. (Si noti che quando si usa DataSource è necessario impostare la proprietà su ciascun postback , più convenientemente in Page_Init.) Impostare EnableAutomaticLoadOnDemand su true.

quindi devo chiamare il seguente metodo ogni volta in 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- riferimento non impostato a un'istanza di un oggetto durante il tentativo di impostare la selezione di una casella combinata.

ho risolto questo problema tramite this.


ho circa 4 dropdowlists ma ognuno deve legarsi in base ad un evento ma devo legare tutti loro nel page_init.

Sarò grato a una risposta dettagliata a questo problema.

+1

Potete trovare risposta dettagliata qui: http://demos.telerik.com/aspnet-ajax/combobox/examples/loadondemand/wcf/defaultcs.aspx?# qsf-demo-source –

+0

@YuriyRozhovetskiy: grazie mille ma voglio sapere quando il combobox si lega, se voglio che la casella combinata leghi i dati solo in un evento specifico per migliorare le prestazioni? –

risposta

8

la mia azienda ha avuto un problema simile. abbiamo finito con l'usare un oggetto jQuery chiamato Select2 e abbiamo pigiato la lista. Fondamentalmente carichiamo solo i primi 10 circa al momento del caricamento, rendendoli veloci da caricare, e se l'utente scorre verso il basso oltre i primi 10 carichiamo i successivi 10 e così via. Select2 ha una funzione di ricerca che colpisce il server per restituire un elenco personalizzato in base alla ricerca.

il problema con il caricamento di 5000 elementi contemporaneamente è che il browser impiegherà un'eternità per caricarli, scorrere attraverso di essi e manipolarli in base alle esigenze. Non sto dicendo "devi usare select2" RadComboBox può avere qualcosa di simile che puoi usare.

Buona fortuna.

+0

Potrebbe darmi un codice di esempio in .net per favore? Come trattate questo controllo? –

+1

non sono in grado di dare un esempio sfortunatamente. in .Net si creerebbe un metodo per caricare i dati necessari. Avresti bisogno di fare un po 'di ricerca sul paging. Il che è semplicemente l'idea di prendere un set di dati di grandi dimensioni e inviarlo in parti più piccole gestibili. Questi dati dovrebbero essere caricati tramite javascript/jquery.Dovresti creare un evento che, quando la persona scorre in fondo all'elenco, carica la pagina successiva di dati. Se qualcuno cerca qualcosa, allora avrai bisogno di un'altra chiamata .net che restituisca i dati di ricerca. –

+0

Ho trovato questo con una piccola ricerca su google. Potrebbe essere utile. http://www.telerik.com/community/code-library/aspnet-ajax/combobox/paging-in-radcombobox-load-on-demand.aspx –

0

Per semplicità basta aggiungere i primi 15 o 20 nomi e quando l'utente digita nella casella combinata, riempie la casella combinata con i nomi restituiti dal database ma non tutti, riempi solo pochi nomi in modo che il browser non si blocchi ...

1

Non consiglio di mostrare il set di dati, ma invece di memorizzarlo in un oggetto javascript. È quindi possibile eseguire il completamento automatico con tale elenco di oggetti. Questo viene fatto tramite jquery, usando un selettore, e quindi applicando una funzione di completamento automatico con esso.

Esempio:

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

Volevo aggiungere un commento per cui la parte formatItem è utilizzata nel tuo menu a discesa, avere una stringa formattata, come span colorati, ecc. O qualsiasi tipo di CSS/informazioni aggiuntive, ma il formatitem è ciò che verrebbe archiviato nella casella. – Fallenreaper

0

È possibile fare la stessa cosa come fa Google. Quando scrivi qualcosa su google, il testo che non è uguale a quello che hai digitato sparirà, ma gli stessi rimarranno lì. Questo renderà la tua ricerca più facile, questa è la risposta.

1

Ho anche incontrato uno scenario simile in cui un numero molto elevato di valori era associato a dropdownlist. L'ultima versione di chrome, firefox e IE è stata in grado di eseguire il binding, ma anche questo richiede circa minuti, ma per lo script di versione precedente si blocca & non funziona mai.

Invece di utilizzare qualsiasi controllo personalizzato o telerik rad box, utilizziamo un approccio semplice. Prendiamo pagina-size valore configurabile (diciamo 50) e numero di pagina (default 1), numero di pagine (Totale conteggio/dimensione della pagina) e criteri (input dell'utente per il completamento automatico) come parametro per il servizio che restituisce valore e recupera solo i record pari alla dimensione della pagina secondo il numero di pagina & della ricerca dei criteri di input.

Prendere una casella di testo & associare questa chiamata di servizio all'evento di cambio testo della casella di testo & associare l'output al menu a discesa di completamento automatico.

La logica per il paging & ricerca è implementata in stored procedure come Stored Procedure having Sorting, Paging and Filtering

Questo è stato facile, veloce e praticamente gestibile rispetto a qualsiasi paginazione lato client, vincolante ecc

1

discesa non è ben adatto per un elenco completo di dipendenti. Qualcuno ha bisogno di ripensare il design.

1

Utilizzare un VirtualizingStackPanel come ItemsPanel per RadComboBoxes se è presente un numero elevato di elementi da visualizzare. Con VirtualizingStackPanel puoi avere decine di migliaia di articoli in RadComboBox.

Utilizzare questo XAML-Code:

  <!-- 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> 
Problemi correlati