winform中DataGridView实现分页功能
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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();