我有来自数据库的表这个表在我的asp页面中有400000行我的下拉列表(ddlPlaintiffName)填写自 这个方法
private void FillPlaintiff() { //declare connection by pass connection string from web.config SqlConnection sqlcon = new SqlConnection (ConfigurationManager.ConnectionStrings["SystemConn"].ConnectionString); //declare sql statment as astring variable SqlCommand sqlcom = new SqlCommand(); sqlcom.Connection = sqlcon; sqlcom.CommandType = CommandType.StoredProcedure; sqlcom.CommandText = "proc_SelectPlaintiff"; DataTable ds = new DataTable(); //fill data set with data adabter that contain data from database // sad.Fill(ds); sqlcon.Open(); SqlDataAdapter sad = new SqlDataAdapter(sqlcom); sad.Fill(ds); ddlPlaintiffName.DataSource = ds; ddlPlaintiffName.DataBind(); ddlPlaintiffName.Items.Insert(0, "--select --"); sqlcon.Close(); }
但每次回发我的负载非常慢,我怎么能避免这个
答案 0 :(得分:5)
首先,你不应该在下拉列表中使用这么大的表。由于用户无法轻易找到价值,因此对他没用。你应该提供某种搜索,并根据搜索条件,虽然ajax,数据应显示在下拉列表中。搜索应该仅在用户输入三个或更多字符时开始,否则基于ajax的查询也会变慢。
请参阅以下页面以获得一个想法
答案 1 :(得分:1)
@Oded的答案是最好的选择。我认为这样的DropDownList没有任何意义。
另一方面,时间问题很难避免。您可以使用ViewState
,但400,000行就像......太多了!也许,如果您解释存储在此表中的数据类型,我们可以考虑另一种方法来执行此操作
答案 2 :(得分:1)
首先,说“不要这样做”的评论和答案是正确的 - 用超过几十个项目的下拉几乎总是对用户无用。
其次,您的问题的答案 - 如果您无法更改用户界面 - 是介绍缓存。有几种方法可以做到这一点;您选择哪种类型取决于具体的瓶颈,但我首先阅读this。