使惯了GirdView最近又重新用了一下DataGird,发现没有分页功能的DataGird确实写起分页来,有些困难。所以,我在此作一下总结!
先在全局变两种声明:
DataTable dtSource;
int PageCount;
int maxRec;
int pageSize;
int currentPage=1;
int recNo;
DataRowView drv;//如果要从DataGird中读取数据!
DataTable dtTemp;
写一个方法:
private void LoadPage()
{
int i;
int startRec;
int endRec;
dtTemp = dtSource.Clone();
if (currentPage == PageCount)
{
endRec = maxRec;
}
else
{
endRec = pageSize * currentPage;
}
startRec = recNo;
if (dtSource.Rows.Count > 0)
{
for (i = startRec; i < endRec; i++)
{
try//没有这个在删除每页最后一行时将报错
{
dtTemp.ImportRow(dtSource.Rows[i]);
recNo += 1;
}
catch
{
}
}
}
dataGrid1.DataSource = dtTemp;
DisplayPageInfo()//显示分页信息,在下面书写
DataGridTableStyle ts = new DataGridTableStyle();
DataGridTextBoxColumn cs1 = new DataGridTextBoxColumn();
cs1.HeaderText = "ID";
cs1.MappingName = "Buyer_id";
cs1.Width = 50;
cs1.Alignment = HorizontalAlignment.Left;
DataGridTextBoxColumn cs2 = new DataGridTextBoxColumn();
cs2.HeaderText = "姓名";
cs2.MappingName = "Buyer_Name";
cs2.Width = 50;
cs2.Alignment = HorizontalAlignment.Left;
ts.GridColumnStyles.Add(cs1);
ts.GridColumnStyles.Add(cs2);
ts.MappingName = dtTemp.TableName;
try
{
dataGrid1.TableStyles.Add(ts);
}
catch
{
}
}
private void DisplayPageInfo()//显示分页信息
{
this.textBox1.Text = currentPage.ToString() + "/ " + PageCount.ToString();
}
private void btnFirstPage_Click(object sender, EventArgs e)//首页
{
if (currentPage == 1)
{
MessageBox.Show("您已经在首页!");
return;
}
currentPage = 1;
recNo = 0;
LoadPage();
}
private void btnPreviousPage_Click(object sender, EventArgs e)//前一页
{
if (currentPage == PageCount)
{
recNo = pageSize * (currentPage - 2);
}
currentPage -= 1;
if (currentPage < 1)
{
MessageBox.Show("您已经在首页!");
currentPage = 1;
return;
}
else
{
recNo = pageSize * (currentPage - 1);
}
LoadPage();
}
private void btnNextPage_Click(object sender, EventArgs e)//下一页
{
currentPage += 1;
if (currentPage > PageCount)
{
currentPage = PageCount;
if (recNo == maxRec)
{
MessageBox.Show("您已经在末页!");
return;
}
}
LoadPage();
}
private void btnLastPage_Click(object sender, EventArgs e)//末页
{
if (recNo == maxRec)
{
MessageBox.Show("您已经在末页!");
return;
}
currentPage = PageCount;
recNo = pageSize * (currentPage - 1);
LoadPage();
}
在本窗体的Load事件中书写:
private void BuyerControl_Load(object sender, EventArgs e)
{
dtSource = //自己的数据源Formconfig.TableBind("tbBuyer_Info", "select * from tbBuyer_Info");
pageSize = 10;
maxRec = dtSource.Rows.Count;
PageCount = maxRec / pageSize;
if ((maxRec % pageSize) > 0)
{
PageCount += 1;
}
recNo = (currentPage-1)*pageSize;//保持显示当前页
LoadPage();
}
在DataGird的click事件中书写:
drv= (DataRowView)(this.BindingContext[dtTemp].Current);
drv[“名称”]以调用当前行数据!
在每次添加删除修改中调用窗体的Load事件,即可刷新
浙公网安备 33010602011771号