如何从超大数据表中填充下拉列表?
Posted
技术标签:
【中文标题】如何从超大数据表中填充下拉列表?【英文标题】:how to fill dropdown list from extra huge datatable? 【发布时间】:2012-10-04 14:40:03 【问题描述】:我有来自数据库的表这个表在我的 asp 页面中有 400000 行我的下拉列表(ddlPlaintiffName)填充来自 这个方法
私人无效FillPlaintiff() //通过来自web.config的连接字符串声明连接 SqlConnection sqlcon = 新的 SqlConnection (ConfigurationManager.ConnectionStrings["SystemConn"].ConnectionString); //将sql语句声明为字符串变量 SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = sqlcon; sqlcom.CommandType = CommandType.StoredProcedure; sqlcom.CommandText = "proc_SelectPlaintiff"; 数据表 ds = 新数据表(); //用包含数据库数据的数据适配器填充数据集 // 悲伤。填充(ds); sqlcon.Open(); SqlDataAdapter 悲伤 = 新的 SqlDataAdapter(sqlcom); 悲伤。填充(ds); ddlPlaintiffName.DataSource = ds; ddlPlaintiffName.DataBind(); ddlPlaintiffName.Items.Insert(0, "--select --"); sqlcon.Close();但是每次回发我的负载都非常非常慢,我该如何避免这种情况
【问题讨论】:
我建议您应该重新考虑您的用户界面,而不是使用自动完成/搜索选项来代替下拉菜单。即使是几百个选项对于下拉菜单来说也是糟糕的 UI。 @Oded 完美地说——这完全不是一个技术问题,因为这个问题的解决方案(对这个问题的回答)会导致 UI 失效。 【参考方案1】:首先你不应该用这么大的表格来做下拉列表。由于用户不容易找到价值,所以对他没有用处。您应该提供某种搜索并基于搜索条件,尽管 ajax,数据应该显示在下拉列表中。只有当用户输入三个或更多字符时才应该开始搜索,否则基于 ajax 的查询也会变慢。
请参考以下页面了解一下
jQuery Searchable DropDown Plugin Demo
【讨论】:
【参考方案2】:@Oded 的回答是最好的选择。我认为这样的 DropDownList 没有任何意义。
另一方面,时间问题是难以避免的。您可以使用ViewState
,但是 400,000 行就像...太多了!也许,如果您解释您在此表中存储的数据类型,我们可以考虑另一种方法来做到这一点
【讨论】:
【参考方案3】:首先,说“不要这样做”的 cmets 和答案是正确的 - 包含几十个项目的下拉菜单对用户几乎总是无用的。
其次,如果您无法更改用户界面,您的问题的答案是引入缓存。有几种方法可以做到这一点;您选择哪一种取决于具体的瓶颈,但我会先阅读this。
【讨论】:
以上是关于如何从超大数据表中填充下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章