12

我想在下拉列表中绑定员工列表,具有自动完成功能,以便用户可以搜索正确的名称。我使用RadComboBox

我有两个主要问题:

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

根据 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- 尝试设置组合框的选择时,对象引用未设置为对象的实例。

我通过这个克服了这个问题。


我有关于4dropdowlists 但每个人都必须根据事件绑定但我必须将所有这些绑定在page_init.

我将不胜感激这个问题的详细答案。

4

6 回答 6

9

我的公司也有类似的问题。我们最终使用了一个名为 Select2 的 jquery 对象,并且我们延迟加载列表。基本上我们在加载时只加载前 10 个左右,使其加载速度很快,如果用户向下滚动超过前 10 个,我们会加载下一个 10 个,依此类推。Select2 有一个搜索功能,它会根据搜索结果访问服务器以返回自定义列表。

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

祝你好运。

于 2013-05-26T14:00:18.003 回答
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>
于 2014-01-27T15:40:10.983 回答
1

我还遇到了类似的情况,其中大量值绑定到下拉列表。最新版本的 chrome、firefox 和 IE 能够绑定它,但这也需要大约几分钟,但对于旧版本的脚本挂起并且永远不会工作。

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

获取一个文本框并将此服务调用绑定到文本框的文本更改事件并将输出绑定到自动完成下拉菜单。

分页和搜索的逻辑是在存储过程中实现的,例如具有排序、分页和过滤的存储过程

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

于 2013-06-20T11:23:31.290 回答
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; }
});
于 2013-06-19T18:22:24.200 回答
0

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

于 2013-06-20T04:38:41.373 回答
0

为简单起见,您只需添加前 15 个或 20 个名称,当用户在组合框上键入时,用从数据库返回的名称填充组合框,但不是全部,只用几个名称填充它,这样浏览器就不会挂起......

于 2013-06-16T14:42:48.317 回答