我想在下拉列表中绑定员工列表,并使用自动填充功能,以便用户可以搜索正确的名称.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
中绑定所有这些。
我将很感激这个问题的详细解答。
答案 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)
你可以像谷歌一样做。当你在谷歌上写一些东西时,与你输入的文字不一样的文字将会消失,但同样的文字会留在那里。这将使您的搜索更容易,这就是答案。