2013-05-26 24 views
12

我要綁定員工列表下拉列表,自動完成功能,使用戶可以搜索合適的名字。我用RadComboBox將大量數據綁定到組合框?

我有兩個主要問題:

1-名單是如此之大約5000 item.so結合這衆多的瀏覽器數據使其掛起或這麼慢。(性能問題)

按照Telerik的文檔

設置一個數據源到radcombobox控件。使用DataSourceID或DataSource屬性執行此操作,並將DataTextField和DataValueField屬性設置爲數據源中的相應字段。 (請注意,使用數據源時,您必須在每個 回發上設置屬性,最方便在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:非常感謝,但是我想知道組合框何時綁定,如果我想組合框僅在特定事件中綁定數據以提高性能? –

回答

8

我的公司有類似的問題。我們最終使用了一個名爲Select2的jquery對象,並且我們懶加載列表。基本上我們在加載時只加載前10個,加載速度很快,如果用戶滾動到前10個,我們加載下10個,等等。 Select2有一個搜索功能,它會根據搜索結果返回一個自定義列表。

一次加載5000個元素的問題是,瀏覽器將永久加載它們,遍歷它們並根據需要操作它們。我不是說「你必須使用select2」RadComboBox可能有這樣的東西,你可以使用。

祝你好運。

+0

可以給我一個在.net中的示例代碼嗎?你如何看待這種控制? –

+1

我不能舉一個例子,不幸的是。在.Net中,您將創建一個加載所需數據的方法。你需要做一些關於分頁的研究。這只是採用大型數據集並將其以較小的可管理區塊發送出去的想法。這些數據需要通過javascript/jquery加載。您需要創建一個事件,當人員滾動到列表底部時,它會加載下一頁數據。如果有人搜索某些東西,那麼您將需要另一個.net調用返回搜索數據。 –

+0

我發現這與一個小的谷歌搜索。它可能是有用的。 http://www.telerik.com/community/code-library/aspnet-ajax/combobox/paging-in-radcombobox-load-on-demand.aspx –

0

爲了簡單起見,只需添加前15或20個名稱,並且當用戶在組合框上鍵入數據時,從數據庫中填充具有返回名稱的組合框但不是全部,只填寫幾個名稱,以便瀏覽器不會掛起...

1

我不建議顯示數據集,而是將其存儲在JavaScript對象中。然後,您可以使用該對象列表進行自動完成。這是通過jQuery,使用選擇器,然後應用自動完成功能。

例子:

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

你可以做同樣的事情,谷歌沒有。當你在谷歌上寫東西時,與你輸入的文字不同的文字將會消失,但是相同的文字會留在那裏。這會讓你的搜索更容易,這是答案。

1

我也遇到過類似的情況,其中非常大數量的值綁定到dropdownlist。最新版本的Chrome,Firefox和IE能夠綁定,但這也需要大約幾分鐘,但對於較舊的版本腳本掛起&從來沒有工作。

我們使用簡單的方法代替使用任何自定義控件或telerik rad盒。 我們採取頁面大小作爲配置的值(比如50)和頁碼(默認爲1),一些(用戶輸入自動完成)頁(總計數/頁面大小)和搜索條件作爲服務返回值的參數,並按照輸入搜索標準&頁碼僅提取等於頁面大小的記錄。

以一個文本框&綁定這個服務調用的文本改變文本框&綁定輸出的情況下自動完成下拉列表。

分頁&搜索的邏輯在存儲過程中實現像Stored Procedure having Sorting, Paging and Filtering

這是方便,快捷,幾乎比維護任何客戶端分頁,裝訂等

1

下拉列表中沒有很好適合完整的員工名單。有人需要重新考慮設計。

1

如果有大量要顯示的項目,請使用VirtualizingStackPanel作爲您的RadComboBoxes的ItemsPanel。 使用VirtualizingStackPanel,您可以在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>