MSDN中“演练:使用 Web 窗体页创建分页的数据访问” 一文中的代码的一点改进

如果你安装了MSDN,正在学习使用.NET制作网站,也许会碰到这样一个示例文档:

Visual Basic 和 Visual C# 概念

演练:使用 Web 窗体页创建分页的数据访问

ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/vbcon/html/vbwlkwalkthroughdisplayingdatainlistboxesonwebformspage.htm

文中讲述了如何制作一个带有自定义分页的数据列表,特点是每次只从数据库中取出相应条数的数据,这种方式对于大型的数据表的列表显示非常有好处,比另外一种一次将所有数据全取出后再缓存分页的方案好。

本人在采用此方案时发现几处小的BUG,如下:

  1. 在“定位到下一页”的程序代码中,

    private void btnNext_Click(object sender, System.EventArgs e)
    {
       // Get the page number of the page most recently displayed
       CurrentPage = (int)(ViewState["CurrentPage"]);
       CurrentPage++;
       // Gets the id on current page
       string lastid = DataGrid1.Items[9].Cells[0].Text;
       cmdNext.Parameters["@customerid"].Value = lastid;
       FillGrid(cmdNext);
    }
    红字部分应该改为“string lastid = DataGrid1.Items[DataGrid1.PageSize-1].Cells[0].Text;”,否则当条数(PageSize)不是缺省的10条时,可能会导致出错。

  2. 另外在“在网格中显示数据”这部分中,你会看到有部分代码是判断当本页所取条数小于PageSize时,即认为是数据表的最后一页时,设定“下一页”按钮失效,同样应该加上判断当前页为0或小于0时,即认为是数据表的第一页时,设定“上一页”按钮失效的代码,如下:

       if (DataGrid1.Items.Count < DataGrid1.PageSize)
       {
        btnNext.Enabled = false;
       }
       if (CurrentPage <= 0)
       {
        btnPrevious.Enabled = false;
       }

  3. 在步骤2的同时,在btnNext_Click方法中还应加上此句“this.btnPrevious.Enabled = true;”,以便在换页后将“上一页”按钮先激活,再根据步骤2中的判断设定按钮的失效与否。
  4. 补充:刚刚检查看又发现一个新问题,当最后一页的条数刚好是页面条数时,“下一页”按钮依然有效,点击后就会出错,因为已经没有相应的记录可供显示了。所以补充修改如下:(注意红色标记部分)

       if(dr.HasRows==true)
       {
        DataGrid1.DataSource = dr;
        DataGrid1.DataBind();
        dr.Close();
        sqlConnection1.Close();
        ViewState["CurrentPage"] = CurrentPage;
        ViewState[CurrentPage.ToString()] = DataGrid1.Items[0].Cells[0].Text;
        if (DataGrid1.Items.Count < DataGrid1.PageSize)
        {
         btnNext.Enabled = false;
        }
        if (CurrentPage <= 0)
        {
         btnPrevious.Enabled = false;
        }
       }
       else
       {
        btnNext.Enabled = false;
       }

至此,经本人测试这样的分页列表就比较完善了,可以适应不同的分页条数了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世风十三

你是个有品的人, :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值