DataGridView实现分页...vs2005 C# winform

如何实现Datagridview的分页,看好是windows应用程序的datagridview,不是web的gridview..想做得像web里面那个分页那样..!讲讲原... 如何实现Datagridview的分页,看好是windows应用程序的datagridview,不是web的gridview..想做得像web里面那个分页那样..!
讲讲原理,最好有代码..!先拜谢了~~
我用的动态绑定的.
我今年毕业,没学过控件..鸭梨好大= =!....后台代码需要写些什么,我添了5个linklab了?!
展开
 我来答
xiaoshitou4428
2011-03-18
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。
在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。
设计时:
1、定义几个所需的公有成员:

int pageSize = 0; //每页显示行数
int nMax = 0; //总记录数
int pageCount = 0; //页数=总记录数/每页显示行数
int pageCurrent = 0; //当前页号
int nCurrent = 0; //当前记录行
DataSet ds = new DataSet();
DataTable dtInfo = new DataTable();

2、在窗体载入事件中,从数据源读取记录到DataTable中:

string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL"; //数据库连接字符串
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string strSql = "SELECT * FROM CUSTOMERS";
SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
sda.Fill(ds,"ds");
conn.Close();
dtInfo = ds.Tables[0];
InitDataSet();
3、用当前页面数据填充DataGridView

private void InitDataSet()
{
pageSize = 20; //设置页面行数
nMax = dtInfo.Rows.Count;

pageCount=(nMax/pageSize); //计算出总页数

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

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

LoadData();
}
private void LoadData()
{
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行

DataTable dtTemp = dtInfo.Clone(); //克隆DataTable结构框架

if (pageCurrent == pageCount)
nEndPos = nMax;
else
nEndPos = pageSize * pageCurrent;

nStartPos = nCurrent;

lblPageCount.Text = pageCount.ToString();
txtCurrentPage.Text = Convert.ToString(pageCurrent);

//从元数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(dtInfo.Rows[i]);
nCurrent++;
}
bdsInfo.DataSource = dtTemp;
bdnInfo.BindingSource = bdsInfo;
dgvInfo.DataSource = bdsInfo;
}
4、菜单响应事件:

private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
if (e.ClickedItem.Text == "关闭")
{
this.Close();
}
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();
}
}
自己只要照着改就可以咯 不懂可以再问我
更多追问追答
追问
你的是博客园上面的一个例子吧...那个上一页下一页有问题的哦~``
追答
没有吧!你要看懂里面的来就可以的咯 我自己都可以改好咯!还可以变换!你哪里会出错!
shiyuxing2010
2011-03-19 · 超过10用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:0
展开全部
我做过一个,效果非常好用。原理是这样的
做一个控件,这个控件就是有上一页下一页全部跳转等功能的那个东东,跟Web上的差不多。然后在这么控件类中有一些必要的属性:DataGridView,PageSize,CurrentIndex,TableName,Fields,Query等等,这个控件类写好后,客户程序只要把控件加载到本地DataGridView的下方,每次绑定时传四个参数就行了:要绑字的DataGridView,SQL语句,当前页码,页大小剩下的就由它自己去做了。
追问
这个方法我想过..我想弄首页,上一页,1,下一页,末页5个linklabel,然后整体的控件属性不知道怎么设置,准备毕业了,现在在实习..没搞过控件= =!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孤独丶的丨世界
2011-03-18 · TA获得超过1153个赞
知道小有建树答主
回答量:670
采纳率:0%
帮助的人:212万
展开全部
你可以把DataGridView和 bindingNavgint控件组合运用就有翻页
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hongyunqiankun
2011-03-18 · TA获得超过211个赞
知道答主
回答量:156
采纳率:0%
帮助的人:94.6万
展开全部
你可以自己写个分页控件啊 如果不会我给你发一个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式