积极答复者
ListView查询后Datapager显示的页数不对

问题
-
大家好:
有个问题麻烦大家给点建议。
----------------------------------------------------问题----------------------------------------------------
项目中我使用了ListView与Datapager来显示数据并进行分页。数据默认情况下,ListView分为4页。
当选择查询条件后(查询条件通过文本框与下拉框输入),点击“查询按钮”,查询记录正确显示,并分为2页(符合实际情况)
此时,“清空查询条件”后再次点击查询按钮,ListView却被分为了很多页(默认情况下,数据用4页分割就够了)。点击第5页,显示的内容与第1也相同;点击第6页,显示的内容与第2也相同。
请问,问题出在哪里?我觉得是Datapager控件中我少做了什么,但应该怎么进行控制??
----------------------------------------------------代码----------------------------------------------------
前台Datapager代码,Datapager是放在ListView中的
<asp:DataPager ID="DataPager1" runat="server" QueryStringField="pageNumber" PagedControlID="ListView1"> <Fields> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> <asp:NumericPagerField /> <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> </Fields> </asp:DataPager>
后台查询按钮的代码:(只是部分代码,剩余的只是查询条件的累加而已)
protected void lkbtSearch_Click(object sender, EventArgs e) { string linkdata = "Data Source=(local);Initial Catalog=AssetsManageSys;" + "Integrated Security=SSPI"; using (SqlConnection conn = new SqlConnection(linkdata)) { conn.Open(); using (SqlCommand comm = conn.CreateCommand()) { StringBuilder strbuilder = new StringBuilder(); strbuilder.Append("select * from dbo.AssetsMain a,dbo.EmployeeInfor e where 1=1"); if (txtRFIDCode.Text != "") { strbuilder.Append(" and a.RFID like '%" + txtRFIDCode.Text.Trim() + "%'" + "and a.EmployeeID=e.EmployeeID"); } if (txtProdName.Text != "") { strbuilder.Append(" and a.ProductName like '%" + txtProdName.Text.Trim() + "%'" + "and a.EmployeeID=e.EmployeeID"); } DataSet dataset = new DataSet(); SqlDataAdapter adapter = new SqlDataAdapter(comm); adapter.Fill(dataset); DataTable dt = dataset.Tables[0]; ListView1.DataSourceID = ""; ListView1.DataSource = dt; ListView1.DataBind(); //Session["QueryParam"]用来保存查询条件的参数,当页面从其他页面
//跳转回“查询页面”后,SQL就可以根据这些条件再次查询并绑定到
、 //ListView上 Session["QueryParam"] = StoreQueryParam(); } } }
答案
-
从你的描述中,我猜测是这样的:当条件查询的页数是3页时,再次无条件查询时会显示(4+3)页,最后三页与前面数据相同。
如果是这样的话,建议检查下数据源邦定的问题,导致页数计算出错。
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Mike FengModerator 2012年5月16日 4:28
-
感谢两位的回复,问题已经找到了。原因在于点击页码时,页码发生PostBack,然后ListView会绑定到原始的“未查询”的结果集上而不是绑定到“查询结果集”。因此点击页码2时,显示的当然是原始数据的第二页的内容。
解决方法很简单,只要在Page_Load()中帮“查询结果集”绑定到ListView即可。
- 已标记为答案 monalisali 2012年5月15日 14:17
全部回复
-
>>默认情况下,ListView分为4页。
有这个的SQL语句吗?
总觉得是Page_Load里的SQL语句和lkbtSearch_Click事件里的SQL语句不一样
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
-
从你的描述中,我猜测是这样的:当条件查询的页数是3页时,再次无条件查询时会显示(4+3)页,最后三页与前面数据相同。
如果是这样的话,建议检查下数据源邦定的问题,导致页数计算出错。
Mike Feng
MSDN Community Support | Feedback to us
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
- 已标记为答案 Mike FengModerator 2012年5月16日 4:28
-
感谢两位的回复,问题已经找到了。原因在于点击页码时,页码发生PostBack,然后ListView会绑定到原始的“未查询”的结果集上而不是绑定到“查询结果集”。因此点击页码2时,显示的当然是原始数据的第二页的内容。
解决方法很简单,只要在Page_Load()中帮“查询结果集”绑定到ListView即可。
- 已标记为答案 monalisali 2012年5月15日 14:17