winform datagridview分页
datagridview可不可以跟app手机列表分页一样 鼠标划到底层就分页显示 --------------------编程问答-------------------- 我做的时候是自己设定50行之后开始分页,一页50行。那样挺简单的 --------------------编程问答-------------------- 比如设定每次显示10条,每次根据选出的最大的id作为条件去选择下一组,其实你要做的是sql的分页技术,滚动到最后一条后,要选取下一页 --------------------编程问答-------------------- 问题是滚动到最底层获取不到最后一条 怎么获取滚动到最底层跟最后一条数据匹配?? --------------------编程问答-------------------- 你可以获取dgv.rows.count --------------------编程问答-------------------- 对于这个问题我们可以通过代码来实现分页测试代码如下
--------------------编程问答-------------------- 效果如下图
public partial class Form1 : Form
{
private DataTable dataSource = new DataTable(); //所有数据
private DataTable displayTable = new DataTable(); //当前页数据
private int pageSize = 5; //页容量
private int curPageIndex = 0; //当前页索引
private int totalPage = 0; //总页数
private int totalRow = 0; //总数据记录
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//初始化表结构
InitDataTable(this.dataSource);
InitDataTable(this.displayTable);
//获取所有的数据填充到dataSource
GetData(this.dataSource);
//重置页相关信息
ResetFieldData(false);
//根据页相关设置当前显示的数据
FillDisplayTable();
this.dataGridView1.DataSource = this.displayTable;
}
#region 数据处理
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
private void GetData(DataTable dt)
{
for (int i = 0; i < 23; i++)
{
DataRow dr = dt.NewRow();
dr["PName"] = "Name" + i;
dr["PCode"] = i.ToString().PadLeft(4, '0');
dr["PAge"] = 20 + i;
dt.Rows.Add(dr);
}
}
/// <summary>
/// 初始化表
/// </summary>
/// <param name="dt"></param>
private void InitDataTable(DataTable dt)
{
dt.Columns.Add(new DataColumn("PName", typeof(string)));
dt.Columns.Add(new DataColumn("PCode", typeof(string)));
dt.Columns.Add(new DataColumn("PAge", typeof(int)));
}
#endregion
#region 当前页数据显示
/// <summary>
/// 数据展示
/// </summary>
private void FillDisplayTable()
{
this.displayTable.Clear();
if (totalRow <= 0)
{
DisplayInfo();
return;
}
if (totalRow % pageSize == 0)
{
FillData(true, 0);
}
else
{
int lastPageRows = totalRow % pageSize;
if (curPageIndex < totalPage - 1)
FillData(true, 0);
else
FillData(false, lastPageRows);
}
DisplayInfo();
}
/// <summary>
/// 设置当前Grid显示数据
/// </summary>
private void FillData(bool flag, int lastPageRows)
{
int temp = 0;
if (flag)
temp = pageSize;
else
temp = lastPageRows;
for (int index = curPageIndex * pageSize; index < curPageIndex * pageSize + temp && curPageIndex < totalPage; index++)
{
DataRow dr = displayTable.NewRow();
dr["PName"] = dataSource.Rows[index]["PName"];
dr["PCode"] = dataSource.Rows[index]["PCode"];
dr["PAge"] = dataSource.Rows[index]["PAge"];
displayTable.Rows.Add(dr);
}
}
/// <summary>
/// 重置页相关信息
/// </summary>
/// <param name="isUpdate">是否为删除或增加了数据源dataSource,这样会修改curPageIndex</param>
private void ResetFieldData(bool isUpdate)
{
if (this.dataSource.Rows.Count == 0)
{
this.totalPage = 0;
this.totalRow = 0;
this.curPageIndex = 0;
return;
}
if (this.dataSource.Rows.Count % pageSize == 0)
{
this.totalPage = this.dataSource.Rows.Count / pageSize;
this.totalRow = this.dataSource.Rows.Count;
}
else
{
this.totalPage = this.dataSource.Rows.Count / pageSize + 1;
this.totalRow = this.dataSource.Rows.Count;
}
if (isUpdate)
this.curPageIndex = this.totalPage - 1;
}
/// <summary>
/// 显示页和相关信息
/// </summary>
private void DisplayInfo()
{
this.lkl_DisplayInfo.Text = string.Format("共{0}页,{1}项|第{2}页", this.totalPage, this.totalRow, this.curPageIndex + 1);
}
#endregion
#region 翻页处理
private void btn_FirstPage_Click(object sender, EventArgs e)
{
if (this.curPageIndex == 0)
return;
this.curPageIndex = 0;
FillDisplayTable();
DisplayInfo();
}
private void btn_PrePage_Click(object sender, EventArgs e)
{
if (this.curPageIndex == 0)
return;
this.curPageIndex -= 1;
FillDisplayTable();
DisplayInfo();
}
private void btn_NestPage_Click(object sender, EventArgs e)
{
if (this.curPageIndex == totalPage - 1 || this.totalPage <= 0)
return;
this.curPageIndex += 1;
FillDisplayTable();
DisplayInfo();
}
private void btn_LastPage_Click(object sender, EventArgs e)
{
if (this.curPageIndex == totalPage - 1 || this.totalPage <= 0)
return;
this.curPageIndex = totalPage - 1;
FillDisplayTable();
DisplayInfo();
}
#endregion
}
补充:.NET技术 , C#