DatGridView加载数据和分页!(在线==)

Cedric_11 2008-07-09 09:55:45
namespace //省略
{
public //省略
{
int pageSize = 0;
int maxRec = 0;
int pageCount = 0;
int currentPage = 0;
int recNo = 0;
DataTable dtSource = new DataTable();

DataSet ds = null;
public Form_Manufactory()
{
InitializeComponent();
}


private void getFillDateset()
{
try
{
//每页显示数
pageSize = 20;
//得到最大记录数
maxRec = dtSource.Rows.Count;
//共有多少页
pageCount = (maxRec / pageSize);
//取余数
if ((maxRec % pageSize) > 0)
{
pageCount++;
}
//默认第一页
currentPage = 1;
recNo = 0; //当前记录数从0开始
LoadPage();
}
catch
{
}
}

/// <summary>
/// 判断是否数据已经加载
/// </summary>
/// <returns></returns>
private bool CheckFillButton()
{
if (pageSize == 0)
return false;
else
return true;
}

/// <summary>
/// 取DataTable的数据
/// </summary>
private void LoadPage()
{
int startRec; //当前页面开始记录行
int endRec; //当前页面结束记录行
DataTable dtTemp;
dtTemp = dtSource.Clone();
if (currentPage == pageCount)
endRec = maxRec;
else
endRec = pageSize * currentPage;
startRec = recNo;
for (int i = startRec; i < endRec; i++)
{
dtTemp.ImportRow(dtSource.Rows[i]);
recNo++;
}

this.dataGridView_Manufactory.DataSource = dtTemp;
}

private void changepage(int m)
{
switch (m)
{
case 1:
if (currentPage == 1)
{
MessageBox.Show("已经是第一页了");
return;
}
currentPage = 1;
recNo = 0;
LoadPage();
break;
case 2:
//if (currentPage == pageCount)
// recNo = pageSize * (currentPage - 2);
currentPage--;
if (currentPage < 1)
{
MessageBox.Show("已经是第一页了");
currentPage = 1;
return;
}
else
recNo = pageSize * (currentPage - 1);
LoadPage();
break;
case 3:
currentPage++;
if (currentPage > pageCount)
{
//currentPage = pageCount;
//if (recNo == maxRec)
if (currentPage > pageCount)
{
MessageBox.Show("已经是最后一页了");
return;
}
else
recNo = pageSize * (currentPage - 1);
}
LoadPage();
break;
case 4:
if (!CheckFillButton())
return;
if (recNo == maxRec)
{
MessageBox.Show("已经是最后一页了");
return;
}
currentPage = pageCount;
recNo = pageSize * (currentPage - 1);
LoadPage();
break;
}
}

//连接服务器端读取数据
private DataSet GetData()
{
string error = "";
ds = MainDataWeb.GetManufactory(ref error);// 从服务器返回一个DataSet
if (ds == null || ds.Tables.Count == 0 || ds.Tables[0].Rows.Count == 0 || error != "")
{
#if DEBUG
MessageBox.Show("请添加数据库数据", error);
#else
MessageBox.Show(ErrorMessageConst.ConnectServiceError);
StringBuilder sb = new StringBuilder();
sb.AppendFormat("Loc:{0}_GetData,Error:{1}", this.ToString(),error);
log.WriteLog(sb.ToString());
#endif
}
//dataGridView_Manufactory.DataSource = ds.Tables[0].DefaultView;
//comboBox1.DataSource = ds.Tables[0].DefaultView;
//comboBox1.DisplayMember = "AfterSalerName";

return ds;
}

private void Form_Manufactory_Load(object sender, EventArgs e)
{
this.dataGridView_Manufactory.AutoGenerateColumns = false;
this.dataGridView_Manufactory.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

GetData();

dtSource = ds.Tables[0];
getFillDateset();

}




问题来勒:从服务器返回的DataSet是个查询所有数据的语句..
因为数据库只有一条数据,但是运行之后的DataGridView却显示了2条重复的数据..

而且感觉分页好像也有问题,希望大家来看下..

在线等待..
...全文
80 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lc412211 2008-07-09
  • 打赏
  • 举报
回复
你这个是Gridview分页,你用。net自带的分也试试。或用其他的分页方法,网上多的是!
chengqscjh 2008-07-09
  • 打赏
  • 举报
回复
因为数据库只有一条数据,但是运行之后的DataGridView却显示了2条重复的数据
=--------------------------------------------------------
你可以跟踪下,具体是看数据库的语句读出是两条,还是加载的时候重复了
Cedric_11 2008-07-09
  • 打赏
  • 举报
回复
如果嫌分数少了,明天我在加50分~~
viki117 2008-07-09
  • 打赏
  • 举报
回复
可能是DATASET的数据重复了,在LOAD的时候CLEAR()掉在合并数据。。
也有可能是没有给GRIDVIEW重载了数据。。
个人感觉还是DATASET的数据多了。。
sxmonsy 2008-07-09
  • 打赏
  • 举报
回复
看下你的DATASET里有几条数据.要是只有一条就说明重复调用了.要是有二条就说明查询出问题了,
falx2004 2008-07-09
  • 打赏
  • 举报
回复
dataset里面只有1条
那就是重复加载了
如果有两条,查下你的查询语句 实在不行就 distinc

111,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧