将大量数据绑定到组合框?

时间:2013-05-26 13:42:47

标签: c# asp.net performance telerik radcombobox

我想在下拉列表中绑定员工列表,并使用自动填充功能,以便用户可以搜索正确的名称.i使用RadComboBox

我有两个主要问题:

1-关于5000 item的列表非常大。所以在浏览器中绑定大量数据会使其挂起或变慢。(性能问题)

根据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个下拉列表,但每个人都必须根据事件绑定,但我必须在page_init中绑定所有这些。

我将很感激这个问题的详细解答。

8 个答案:

答案 0 :(得分:8)

我的公司有类似的问题。我们最终使用了一个名为Select2的jquery对象,我们懒得加载列表。基本上我们在加载时只加载前10个左右,加载速度快,如果用户向下滚过前10个,我们加载下10个,依此类推。 Select2具有搜索功能,该功能命中服务器以根据搜索返回自定义列表。

一次加载5000个元素的问题是浏览器将永远加载它们,迭代它们,并根据需要操作它们。我不是说“你必须使用select2”RadComboBox可能有这样你可以使用的东西。

祝你好运。

答案 1 :(得分:2)

我在radcombobox中遇到了同样的问题。最后我得到了一个解决方案并发布在我的公司博客中。

请参阅以下链接。

http://elintsys.co.in/blogs/post/2013/06/07/RAD-Combo-box-text-search-browser-uses-100-CPU

我认为这会对你有所帮助。干杯

答案 2 :(得分: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; }
});

答案 3 :(得分:1)

我也遇到了类似的情况,其中大量的值绑定到dropdownlist。最新版本的chrome,firefox和IE能够绑定,但这也需要大约几分钟,但对于旧版本脚本挂起&从来没有工作过。

我们使用简单的方法,而不是使用任何自定义控件或telerik rad盒。 我们将页面尺寸作为可配置值(比如50)和页码(默认1),页数(总计数/页面大小) )和搜索条件(用于自动完成的用户输入)作为服务返回值的参数,并且根据输入搜索条件仅获取等于页面大小的记录。页码。

拿一个文字框&将此服务调用绑定到文本框的文本更改事件&将输出绑定到自动完成下拉列表。

寻呼的逻辑&搜索在Stored Procedure having Sorting, Paging and Filtering

等存储过程中实现

这比任何客户端分页,绑定等都简单,快速且几乎可维护。

答案 4 :(得分:1)

下拉列表不适合完整的员工列表。有人需要重新考虑设计。

答案 5 :(得分:1)

如果要显示大量项目,请将VirtualizingStackPanel用作RadComboBox的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>

答案 6 :(得分:0)

为简单起见,您只需添加前15或20个名称,当组合框中的用户类型填充时,使用数据库中的返回名称填充组合框,但不是全部,只填充少量名称,以便浏览器不会挂起... < / p>

答案 7 :(得分:0)

你可以像谷歌一样做。当你在谷歌上写一些东西时,与你输入的文字不一样的文字将会消失,但同样的文字会留在那里。这将使您的搜索更容易,这就是答案。