winform中DataGridView实现分页功能

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

winform中DataGridView实现分页功能

在winform的设计中,要实现对DataGridView控件的分页功能,需要两个控件:BindingSource、BindingNavigator,根据需求可对BindingNavigator进行自由的扩展,下图的示例则是根据一般需求对分页功能的实现。红色区域是对BindingNavigator控件扩展后的效果。

具体实现过程:

//窗体构造方法中定义分页所需变量:

int pageSize = 0; //每页显示行数

int nMax = 0; //总记录数

int pageCount = 0; //页数=总记录数/每页显示行数

int pageCurrent = 0; //当前页号

int nCurrent = 0; //当前记录行

DataTable dtInfo = new DataTable(); //存取查询数据结果

//分页功能实现

public void InitDataSet()

{

//判断每页显示记录数是否为空,在初始话窗体时为真

if (txtRecordNumOfPage.Text.Trim() == "")

{

try

{

//pageSize =

Convert.ToInt16(ConfigurationManager.AppSettings["PageSize"]); //设置页面行数

//读取配置文件中设置的每页显示条数

string szConfigFileName = Application.ExecutablePath + ".config"; XmlDocument doc = new XmlDocument();

doc.Load(szConfigFileName);

XmlNode root = doc.SelectSingleNode("configuration");

XmlNode node =

root.SelectSingleNode("appSettings/add[@key='PageSize']");

XmlElement el = node as XmlElement;

pageSize = Convert.ToUInt16(el.GetAttribute("value"));

}

catch

{

}

if (pageSize == 0)

{

pageSize = 20; //如果读取配置文件失败,则默认将每页显示条数设置为20

}

txtRecordNumOfPage.Text = pageSize.ToString(); //界面显示的“每页记录数”赋值

}

else

{

//读取界面设置的每页显示条数

pageSize = Convert.ToUInt16(txtRecordNumOfPage.Text.Trim());

}

//总记录数赋值

nMax = dtInfo.Rows.Count;

pageCount = (nMax / pageSize); //采用整除计算页数

//判断整除后是否有余数,有则对页数进行+1

if ((nMax % pageSize) > 0) pageCount++;

pageCurrent = 1; //当前页数从1开始

nCurrent = 0; //当前记录数从0开始

//调用显示数据方法

LoadData();

}

//显示数据方法

private void LoadData()

{

int nStartPos = 0; //当前页面开始记录行

int nEndPos = 0; //当前页面结束记录行

//判断查询结果是否为空

if (dtInfo.Rows.Count == 0)

{

dgvExperInfo.DataSource = null;

return;

}

else

{

DataTable dtTemp = dtInfo.Clone(); //克隆DataTable结构,即将字段名称进行复制

if (pageCurrent == 1)

{

bindingNavigatorMoveFirstPage.Enabled = false;

bindingNavigatorMovePreviousPage.Enabled = false;

}

else

{

bindingNavigatorMoveFirstPage.Enabled = true;

bindingNavigatorMovePreviousPage.Enabled = true;

}

if (pageCurrent == pageCount)

{

nEndPos = nMax;

bindingNavigatorMoveLastPage.Enabled = false;

bindingNavigatorMoveNextPage.Enabled = false;

}

else

{

bindingNavigatorMoveLastPage.Enabled = true;

bindingNavigatorMoveNextPage.Enabled = true;

nEndPos = pageSize * pageCurrent;

}

nStartPos = nCurrent;

lblPageCount.Text = pageCount.ToString(); //界面显示总页数 lblCurrentPage.Text = Convert.ToString(pageCurrent);//当前页数

txtCurrentPage.Text = Convert.ToString(pageCurrent);//跳转到页数的显示

//从元数据源复制记录行

for (int i = nStartPos; i < nEndPos; i++)

{

dtTemp.ImportRow(dtInfo.Rows[i]);

nCurrent++;

}

bdsInfo.DataSource = dtTemp;

bdnInfo.BindingSource = bdsInfo;

dgvExperInfo.DataSource = bdsInfo;

dgvExperInfo.ClearSelection();

相关文档
最新文档