DataGridView控件怎么实现分页功能?

 我来答
百度网友96ffcf7
2015-08-05 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace 数据库分页功能
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int i, start;//i为总行数,start为起始位置
int size = 4;//定义一个每页显示的行数
string str = @"Data Source=当前计算机名;Initial Catalog=ptwinshopmanage;Integrated Security=True";//连接字符串
string str1 = "select * from [HouseMessage]";//sql语句
private void Form1_Load(object sender, EventArgs e)
{
SqlConnection sqlcon = new SqlConnection(str);//连接数据库
sqlcon.Open();//打开数据库
SqlCommand sqlcmd = new SqlCommand(str1,sqlcon);//执行sql语句
SqlDataAdapter sqlada = new SqlDataAdapter(sqlcmd);//数据适配器
DataTable dt = new DataTable();//创建表
sqlada.Fill(dt);//填充数据集
i = dt.Rows.Count;//总的行数或者记录数
show(0, size);//每页显示4条记录
start = 0;//第一行
sqlcon.Close();
}
//每页显示记录数j-i+1条
public void show(int i, int j)
{
SqlConnection sqlcon = new SqlConnection(str);
sqlcon.Open();
SqlCommand sqlcmd = new SqlCommand(str1, sqlcon);
SqlDataAdapter sqlada = new SqlDataAdapter(sqlcmd);
DataSet ds = new DataSet();
sqlada.Fill(ds, i, j, "[HouseMessage]");//把数据库表中的i-j的记录数用来填充数据集
ListData.DataSource = ds.Tables["[HouseMessage]"];//ListData为datagridview控件的name属性
ds = null;//清空数据集
}
//首页
private void button1_Click(object sender, EventArgs e)
{
ListData.DataSource = null;//清空数据
show(0,size);//调用show函数
}
//上一页
private void button2_Click(object sender, EventArgs e)
{
ListData.DataSource = null;
start = start - 1;
if (start < 1)
{
MessageBox.Show("已是第一页");
show(0,size);
}
else
show(start * size, size);
}
//下一页
private void button3_Click(object sender, EventArgs e)
{
ListData.DataSource = null;
start = start + 1;
show(start *size, size);
}
//尾页
private void button4_Click(object sender, EventArgs e)
{
ListData.DataSource = null;
show(i - size, i);
}
}
}

运行结果:

匿名用户
2013-06-27
展开全部
privatevoidForm1_Load(objectsender,EventArgse) { //TODO:这行代码将数据加载到表“myDBDataSet.login”中。您可以根据需要移动或移除它。 this.loginTableAdapter.Fill(this.myDBDataSet.login);//自动添加数据时自动生成的 intintMod,dgr; dataGridView2.ScrollBars=System.Windows.Forms.ScrollBars.None;//先让垂直滚动条消失 dgr=dataGridView2.RowCount-1;//取出DGV的行数,为什么要减一是因为它总是多出一行给你编辑的所以那行也占用一行的空间 if(dgr==0)//进行取模 {intMod=0;} else { intMod=1; } for(inti=1;i<=dgr/10 intMod;i )//主要时这个for循环将表一共分为几页添加到comboBox { comboBox2.Items.Add("第" i "页"); } comboBox2.SelectedIndex=0;//默认选中第一个 } 然后在comboBox1_SelectedValueChanged事件里面添加下面代码privatevoidcomboBox1_SelectedValueChanged(objectsender,EventArgse) { dataGridView2.FirstDisplayedScrollingRowIndex=comboBox2.SelectedIndex*10; }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-27
展开全部
//WinForm中DataGridView的分页,需要2个控件,一个BindingSource,一个BindingNavigator。bnPager为BindingNavigator,BindSource为BindingSource。
int pageSize = 0;
int nMax = 0;
int pageCount = 0;
int pageCurrent = 0;
int nCurrent = 0;
DataSet myDs = new DataSet();
DataTable dt = new DataTable();
public frmPage()
{
InitializeComponent();
FillData();
} public void FillData()
{
SqlConnection conn = MyClass.CreateConn();
conn.Open();
SqlDataAdapter myDa = new SqlDataAdapter("select * from bookInfo", conn);
myDa.Fill(myDs, "myTable");
conn.Close();
dt = myDs.Tables[0];
InitDataSet();
}
private void InitDataSet()
{
pageSize = 10;
nMax = dt.Rows.Count;
pageCount = (nMax / pageSize);
if ((nMax%pageSize)>0)
{
pageCount++;
}
pageCurrent = 1;
nCurrent = 0;
LoadData();
} private void LoadData()
{
int nStartPos = 0;
int nEndPos = 0;
DataTable dtTemp = dt.Clone();
if (pageCurrent==pageCount)
{
nEndPos = nMax;
}
else
{
nEndPos = pageSize * pageCurrent;
}
nStartPos = nCurrent;
toolStripLabel1.Text = "/ "+pageCount.ToString();
toolStripLabel2.Text = Convert.ToString(pageCurrent);
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(dt.Rows[i]);
nCurrent++;
}
BindSource.DataSource=dtTemp;
bnPager.BindingSource = BindSource;
DGView.DataSource = BindSource;
} private void bnPager_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.Text=="上一页")
{
pageCurrent--;
if (pageCurrent<=0)
{
MessageBox.Show("已经是第一页,请点击“下一页”查看!");
return;
}
else
{
nCurrent = pageSize * (pageCurrent - 1);
}
LoadData();
}
if (e.ClickedItem.Text=="下一页")
{
pageCurrent++;
if (pageCurrent>pageCount)
{
MessageBox.Show("已经是最后一页,请点击“上一页”查看!");
return;
}
else
{
nCurrent = pageSize * (pageCurrent - 1);
}
LoadData();
}
} 参考资料: http://mengzhongjian.com/newsview.asp?id=55
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-27
展开全部
DataGridView有延时加载功能的,不用分页的。真要分页的话要自己写代码。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
熊熊芮佳0hu
2018-03-13 · TA获得超过344个赞
知道小有建树答主
回答量:392
采纳率:72%
帮助的人:35.1万
展开全部
看它这种态度 ,大家都不要给它任何帮助!就算它给一千分,不要有人回答任何关于技术上的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式