给你我使用过的两种方法: 1、分页的存储过程:create proc PageNum @PageSize int, --每页显示条数 @PageIndex int, --当前是第几页 @totalRows int output, --总行数 @totalPages int output --总页数 as declare @startId int declare @endId int set @startId = @PageSize*(@PageIndex-1)+1 set @endId = @startId+@PageSize-1 select @totalRows=COUNT(*) from Books set @totalPages=@totalRows/@PageSize if(@totalRows%@PageSize != 0) --如果总行数除每页显示数据量的值不等于0,则总页数得加1 begin set @totalPages=@totalPages+1 end declare @IndexTable table(Id int identity(1,1) ,nId int) insert into @IndexTable select Id from Books select * from @IndexTable as t ,Books as b where t.Id>=@startId and t.Id<=@endId and t.nId=b.Id go
1、分页的存储过程:create proc PageNum
@PageSize int, --每页显示条数
@PageIndex int, --当前是第几页
@totalRows int output, --总行数
@totalPages int output --总页数
as
declare @startId int
declare @endId int
set @startId = @PageSize*(@PageIndex-1)+1
set @endId = @startId+@PageSize-1
select @totalRows=COUNT(*) from Books
set @totalPages=@totalRows/@PageSize
if(@totalRows%@PageSize != 0) --如果总行数除每页显示数据量的值不等于0,则总页数得加1
begin
set @totalPages=@totalPages+1
end
declare @IndexTable table(Id int identity(1,1) ,nId int)
insert into @IndexTable select Id from Books
select * from @IndexTable as t ,Books as b where t.Id>=@startId and t.Id<=@endId and t.nId=b.Id
go
declare @tr int --总行数
declare @tp int --总页数
exec PageNum 4,2,@tr output ,@tp output
print '这是总页数'+convert(varchar,@tp) --数据转换
print @tr 2、不一定要用存储过程,可以一次性读到DataTable后,再做处理 private int pageSize = 0; //每页显示行数
private int pageCurrent = 0; //当前页号
private int pageCount = 0; //页数=总记录数/每页显示行数
private int nCurrent = 0; //当前记录行号
private int nMax = 0; //总记录数
private DataTable srcTable = null; //元数据 private void First_Click(object sender, EventArgs e)
{
try
{
pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始 if (srcTable == null || srcTable.Rows.Count == 0)
return; DataTable table = LoadPageData();
ChangeDataSoure(table); First.Enabled =false;
Prev.Enabled = false;
Next.Enabled = true;
End.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void Prev_Click(object sender, EventArgs e)
{
try
{
pageCurrent--;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table); bool b = pageCurrent <= 1 ? false : true;
First.Enabled = b;
Prev.Enabled = b;
Next.Enabled = true;
End.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void Next_Click(object sender, EventArgs e)
{
try
{
pageCurrent++;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return;
DataTable table = LoadPageData();
ChangeDataSoure(table); bool b = pageCurrent >= pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b; First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void End_Click(object sender, EventArgs e)
{
try
{
pageCurrent = pageCount;
nCurrent = pageSize * (pageCurrent - 1); if (srcTable == null || srcTable.Rows.Count == 0)
return; DataTable table = LoadPageData();
ChangeDataSoure(table); Next.Enabled =false;
End.Enabled = false;
First.Enabled = true;
Prev.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} private void InitPageSet()
{
pageSize = 30; //设置页面行数
nMax = srcTable.Rows.Count;
pageCount = (nMax / pageSize); //计算出总页数 if ((nMax % pageSize) > 0)
{
pageCount++;
} pageCurrent = 1; //当前页数从1开始
nCurrent = 0; //当前记录数从0开始 First.Enabled =false;
Prev.Enabled = false; bool b = pageCurrent == pageCount ? false : true;
Next.Enabled = b;
End.Enabled = b;
} private DataTable LoadPageData()
{
int nStartPos = 0; //当前页面开始记录行
int nEndPos = 0; //当前页面结束记录行
DataTable dtTemp = null;
if (srcTable == null || srcTable.Rows.Count == 0)
return srcTable;
try
{
dtTemp = srcTable.Clone(); //克隆DataTable结构框架
if (pageCurrent == pageCount)
{
nEndPos = nMax;
}
else
{
nEndPos = pageSize * pageCurrent;
} nStartPos = nCurrent;
//从元数据源复制记录行
for (int i = nStartPos; i < nEndPos; i++)
{
dtTemp.ImportRow(srcTable.Rows[i]);
nCurrent++;
} textEdit1.Text = pageCurrent.ToString();
Page.Text = string.Format("/{0}页", pageCount);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + "LoadPageData");
}
return dtTemp;
} private void ChangeDataSoure(DataTable table)
{
if (table == null)
return;
gridView1.Columns.Clear();
gridControl1.DataSource = null;
gridControl1.DataSource = table; }
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
bindGV();
}
一。在控件的PagerTemplate中写如下代码:
<table align="center" style="border: 0px; border-style: ridge;" width="700px">
<tr>
<td class="style1" >
<asp:Label ID="lblCurrrentPage" runat="server" ForeColor="#CC3300"></asp:Label>
<span>移至</span>
<asp:DropDownList ID="page_DropDownList" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="page_DropDownList_SelectedIndexChanged">
</asp:DropDownList>
<span>页</span>
<asp:LinkButton ID="lnkBtnFirst" runat="server" CommandArgument="First"
CommandName="page" ForeColor="Yellow">第一页</asp:LinkButton>
<asp:LinkButton ID="lnkBtnPrev" runat="server" CommandArgument="prev"
CommandName="page" ForeColor="Yellow">上一页</asp:LinkButton>
<asp:LinkButton ID="lnkBtnNext" runat="server" CommandArgument="Next"
CommandName="page" ForeColor="Yellow">下一页</asp:LinkButton>
<asp:LinkButton ID="lnkBtnLast" runat="server" CommandArgument="Last"
CommandName="page" ForeColor="Yellow">最后一页</asp:LinkButton>
</td>
</tr>
</table>
二。在gridview的DataBind事件里写如下代码:
//取得显示分页界面的那一行
GridViewRow pagerRow = GridView1.BottomPagerRow;
if (pagerRow != null)
{
//取得第一页。上一页。下一页。最后一页的超级链接
LinkButton lnkBtnFirst = (LinkButton)pagerRow.Cells[0].FindControl("lnkBtnFirst");
LinkButton lnkBtnPrev = (LinkButton)pagerRow.Cells[0].FindControl("lnkBtnPrev");
LinkButton lnkBtnNext = (LinkButton)pagerRow.Cells[0].FindControl("lnkBtnNext");
LinkButton lnkBtnLast = (LinkButton)pagerRow.Cells[0].FindControl("lnkBtnLast"); //设置何时应该禁用第一页。上一页。下一页。最后一页的超级链接
if (GridView1.PageIndex == 0)
{
lnkBtnFirst.Enabled = false;
lnkBtnPrev.Enabled = false;
}
else if (GridView1.PageIndex == GridView1.PageCount - 1)
{
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
else if (GridView1.PageCount <= 0)
{
lnkBtnFirst.Enabled = false;
lnkBtnPrev.Enabled = false;
lnkBtnNext.Enabled = false;
lnkBtnLast.Enabled = false;
}
//从显示分页的行中取得用来显示页次与切换分页的DropDownList控件
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("page_DropDownList"); //根据欲显示的数据源的总页数,创建DropDownList控件的下拉菜单内容
if (pageList != null)
{
int intPage;
for (intPage = 0; intPage <= GridView1.PageCount - 1; intPage++)
{
//创建一个ListItem对象来存放分页列表
int pageNumber = intPage + 1;
ListItem item = new ListItem(pageNumber.ToString()); //交替显示背景颜色
switch (pageNumber % 2)
{
case 0: item.Attributes.Add("style", "background:#CDC9C2;");
break;
case 1: item.Attributes.Add("style", "color:red; background:white;");
break;
}
if (intPage == GridView1.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item);
}
}
//显示当前所在页数与总页数
Label pagerLabel = (Label)pagerRow.Cells[0].FindControl("lblCurrrentPage"); if (pagerLabel != null)
{ int currentPage = GridView1.PageIndex + 1;
pagerLabel.Text = "第" + currentPage.ToString() + "页(共" + GridView1.PageCount.ToString() + " 页)"; }
}三。在gridview的PageIndexChanging事件里写如下代码:
GridView1.PageIndex = e.NewPageIndex;
GridView1.DataSource = News.GetTopNews();
GridView1.DataBind();
(绑定你所需要的数据)
四。在DropDownList_SelectedIndexChanged事件里写如下代码:
//取得显示分页界面的那一行
GridViewRow pagerRow = GridView1.BottomPagerRow;
//从显示页数的行中取得显示页数的DropDownList控件
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl("page_DropDownList");
//将GridView移至用户所选择的页数
GridView1.PageIndex = pageList.SelectedIndex;
GridView1.DataSource = News.GetTopNews();
GridView1.DataBind();
OK搞定~
我自己的一套gridview操作,包括翻页,排序,删除,修改等操作,而且效率还不错哦!~