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

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

Visual Basic 和 Visual C# 概念

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

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

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

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

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

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条时,可能会导致出错。

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

if (DataGrid1.Items.Count < DataGrid1.PageSize)

{

btnNext.Enabled = false;

}

if (CurrentPage <= 0)

{

btnPrevious.Enabled = false;

}

在步骤2的同时,在btnNext_Click方法中还应加上此句“this.btnPrevious.Enabled = true;”,以便在换页后将“上一页”按钮先激活,再根据步骤2中的判断设定按钮的失效与否。

补充:刚刚检查看又发现一个新问题,当最后一页的条数刚好是页面条数时,“下一页”按钮依然有效,点击后就会出错,因为已经没有相应的记录可供显示了。所以补充修改如下:(注意红色标记部分)

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;

}

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航