none
ListView查询后Datapager显示的页数不对 RRS feed

  • 问题

  • 大家好:

    有个问题麻烦大家给点建议。

    ----------------------------------------------------问题----------------------------------------------------

    项目中我使用了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(); } } }


    2012年5月14日 13:07

答案

  • 从你的描述中,我猜测是这样的:当条件查询的页数是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.

    2012年5月15日 10:43
    版主
  • 感谢两位的回复,问题已经找到了。原因在于点击页码时,页码发生PostBack,然后ListView会绑定到原始的“未查询”的结果集上而不是绑定到“查询结果集”。因此点击页码2时,显示的当然是原始数据的第二页的内容。

    解决方法很简单,只要在Page_Load()中帮“查询结果集”绑定到ListView即可。

    • 已标记为答案 monalisali 2012年5月15日 14:17
    2012年5月15日 14:17

全部回复

  • >>默认情况下,ListView分为4页。

    有这个的SQL语句吗?

    总觉得是Page_Load里的SQL语句和lkbtSearch_Click事件里的SQL语句不一样


    2012年5月15日 7:32
  • 从你的描述中,我猜测是这样的:当条件查询的页数是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.

    2012年5月15日 10:43
    版主
  • 感谢两位的回复,问题已经找到了。原因在于点击页码时,页码发生PostBack,然后ListView会绑定到原始的“未查询”的结果集上而不是绑定到“查询结果集”。因此点击页码2时,显示的当然是原始数据的第二页的内容。

    解决方法很简单,只要在Page_Load()中帮“查询结果集”绑定到ListView即可。

    • 已标记为答案 monalisali 2012年5月15日 14:17
    2012年5月15日 14:17