302班

java突击队
posts - 151, comments - 74, trackbacks - 0, articles - 14
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

DataList自定义分页+存储过程

Posted on 2007-07-20 13:37 停留的风 阅读(1052) 评论(3)  编辑  收藏
 

1.页面后台代码
private void Page_Load(object sender, System.EventArgs e)
{
 if(!Page.IsPostBack)
 {
  ItemCount=GetItemCount();   //获取总记录数
  PageSize=5;     //设置每页显示多少条记录
  NumSize=6;     //设置分页按钮显示数量
  if(ItemCount==0)   //计算总页数
   PageCount=1;
  else
   PageCount=ItemCount%PageSize==0?ItemCount/PageSize:ItemCount/PageSize+1;
  PageURL=Request.Path;  //获取当前页面的URL
  string URLParameters="?Page=";  //额外的URL参数设置
  PageURL+=URLParameters;
  Bind_PagerList();
 }
 string RequestPage=Request.QueryString["Page"];
 if(RequestPage==null || RequestPage==string.Empty || int.Parse(RequestPage)<=0) //计算PageIndex
  PageIndex=1;
 else if(int.Parse(RequestPage)>PageCount)
  PageIndex=PageCount;
 else
  PageIndex=int.Parse(RequestPage);
 this.dlPager.SelectedIndex=PageIndex-1;  //下拉列表选定项
 Bind_Pager();        //绑定分页Panel所有按钮
 Bind_DataList();       //数据绑定
}

private void Bind_Pager()
{
 lnkFirst.NavigateUrl=PageURL+1;
 lnkFirst.ToolTip="转到第1页";
 lnkPrev.NavigateUrl=PageURL+(PageIndex-1);
 lnkPrev.ToolTip="转到第"+(PageIndex-1)+"页";
 lnkNext.NavigateUrl=PageURL+(PageIndex+1);
 lnkNext.ToolTip="转到第"+(PageIndex+1)+"页";
 lnkLast.NavigateUrl=PageURL+PageCount;
 lnkLast.ToolTip="转到第"+PageCount+"页";
 if(PageCount==1) //只有1页
 {
  lnkFirst.Enabled=false;
  lnkPrev.Enabled=false;
  lnkNext.Enabled=false;
  lnkLast.Enabled=false;
 }     //多页
 else if(PageIndex==1) //当前页为第一页
 {
  lnkFirst.Enabled=false;
  lnkPrev.Enabled=false;
  lnkNext.Enabled=true;
  lnkLast.Enabled=true;
 }
 else if(PageIndex==PageCount) //当前页为最后页
 {
  lnkFirst.Enabled=true;
  lnkPrev.Enabled=true;
  lnkNext.Enabled=false;
  lnkLast.Enabled=false;
 }
 else  //中间任意页
 {
  lnkFirst.Enabled=true;
  lnkPrev.Enabled=true;
  lnkNext.Enabled=true;
  lnkLast.Enabled=true;
 }
 HyperLink NumBtns;
 int PageBase=PageIndex%NumSize==0?PageIndex/NumSize-1:PageIndex/NumSize;
 for(int i=PageBase*NumSize+1;i<=(PageBase+1)*NumSize && i<=PageCount;i++) //分页按钮绑定 例如 1-10…,…11-20…...
 {
  if(i!=1 && i==PageBase*NumSize+1)   //页标前的…
  {
   NumBtns = new HyperLink();
   NumBtns.Text="…";
   NumBtns.ToolTip="转到第"+(i-1)+"页";
   NumBtns.NavigateUrl=PageURL+(i-1);
   NumBtns.Enabled=true;
   NumBtns.CssClass="pager";
   lbPager.Controls.Add(NumBtns);
  }
  if(i==PageIndex)       //当前页
  {
   NumBtns = new HyperLink();
   NumBtns.Text=i.ToString();
   NumBtns.Font.Bold=true;
   NumBtns.ForeColor=Color.Red;
   NumBtns.CssClass="pager";
   lbPager.Controls.Add(NumBtns);
  }
  else          //其他页
  {
   NumBtns = new HyperLink();
   NumBtns.Text=i.ToString();
   NumBtns.ToolTip="转到第"+i.ToString()+"页";
   NumBtns.NavigateUrl=PageURL+i.ToString();
   NumBtns.Enabled=true;
   NumBtns.CssClass="pager";
   lbPager.Controls.Add(NumBtns);
  }
  if(i!=PageCount && i==(PageBase+1)*NumSize) //页标后的…
  {
   NumBtns = new HyperLink();
   NumBtns.Text="…";
   NumBtns.ToolTip="转到第"+(i+1)+"页";
   NumBtns.NavigateUrl=PageURL+(i+1);
   NumBtns.Enabled=true;
   NumBtns.CssClass="pager";
   lbPager.Controls.Add(NumBtns);
  }
 }
}

private void Bind_DataList()
{
 using(SqlConnection myconn=new SqlConnection(ConfigurationSettings.AppSettings["connStr"]))
 {
  SqlCommand mycmd=new SqlCommand("sp_Pager",myconn);
  mycmd.CommandType=CommandType.StoredProcedure;
  mycmd.Parameters.Add(new SqlParameter("@PageSize",SqlDbType.Int));
  mycmd.Parameters["@PageSize"].Value=PageSize;
  mycmd.Parameters.Add(new SqlParameter("@PageIndex",SqlDbType.Int));
  mycmd.Parameters["@PageIndex"].Value=PageIndex;
  myconn.Open();
  this.DataList1.DataSource=mycmd.ExecuteReader();
  this.DataList1.DataBind();
  myconn.Close();
 }
}

private void Bind_PagerList()
{
 for(int i=1;i<=PageCount;i++)
 {
  dlPager.Items.Add(new ListItem("第"+i.ToString()+"页",i.ToString()));
 }
 dlPager.Attributes["OnChange"]="location.href="/"+PageURL+"'+this.value";
}

2.存储过程

CREATE PROCEDURE sp_Pager
(
@PageSize int,  -- 一页显示记录数
@PageIndex int  -- 当前页码(从1开始)
)
as
declare @strSQL nvarchar(1000) -- 主语句

if (@PageIndex=1)
begin
set @strSQL="select top "+str(@Pagesize)+" * from 数据表 order by 排序字段 desc"
end
else if(@PageIndex>1)
begin
set @strSQL="select top " + str(@PageSize) + "  *  from 数据表 where ( 自增字段  <
(select min (自增字段) from (select top "+ str(@PageSize*(@PageIndex-1)) + " 自增字段 from 数据表 order
 by 自增字段 desc) as T )) order by 排序字段 desc"
end
exec(@strSQL)
GO


评论

# re: DataList自定义分页+存储过程   回复  更多评论   

2008-04-06 18:07 by GSD
抱歉!太复杂了!没有源码!太难理解了!

# re: DataList自定义分页+存储过程   回复  更多评论   

2009-05-27 19:12 by 说的说的是
拜托 给个前台代码好不

# re: DataList自定义分页+存储过程   回复  更多评论   

2010-01-27 15:06 by nini
存储过程执行出错啊

只有注册用户登录后才能发表评论。


网站导航: