存儲過程分頁,這段代碼太複雜了。不過值得借鑑



CREATE proc page
@RecordCount int output,
@QueryStr nvarchar(100)=@#table1@#,--表名、視圖名、查詢語句
@PageSize int=20,  --每頁的大小(行數)
@PageCurrent int=1,  --要顯示的頁
@FdShow nvarchar (1000)=@#*@#, --要顯示的字段列表
@IdentityStr nvarchar (100)=@#id@#, --主鍵
@WhereStr nvarchar (200)=@#1=1 and id % 11111 = 0@#,
@FdOrder nvarchar(100)=@#id@#, --排序
@isReturn bit=0

as
declare
@sql nvarchar(2000)
set @sql = @#@#
if @WhereStr = @#@# begin
 set @WhereStr = @#1=1@#
end

declare @tsql nvarchar(200)

if(@isReturn=1)begin
 set @tsql=N@#select @RecordCount = count(*) from @# + @QueryStr + @# where @# + @WhereStr
 exec sp_executesql @tsql,N@#@RecordCount int output@#,@RecordCount output
end
else begin
 set @RecordCount = @PageSize * @PageCurrent + 1
end

if @PageCurrent = 1 begin
 set @sql = @#select top @# + cast(@PageSize as nvarchar(3)) + @# @# + @FdShow + @# from @# + @QueryStr + @# where @# + @WhereStr + @# order by @# + @IdentityStr
end
else begin
 set @sql = @#select top @# + cast(@PageSize as nvarchar(3)) + @# @# + @FdShow + @# from @# + @QueryStr + @# where @# + @WhereStr + @# and @# + @IdentityStr + @#> ( select max(@# + @IdentityStr + @#) from (select top @# + cast(@PageSize*(@PageCurrent-1) as nvarchar(10)) + @# @# + @IdentityStr + @# from @# + @QueryStr + @# where @# + @WhereStr + @# order by @# + @IdentityStr + @#) as t) order by @# + @IdentityStr
end
if @FdOrder <>@#@# and @FdOrder<>@IdentityStr begin
 set @sql = @#select * from (@# + @sql + @#) as t4867435348493 order by @# + @FdOrder
end
--print @sql
execute(@sql)
GO

後臺代碼:

  protected System.Web.UI.WebControls.DataGrid DataGrid1;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此處放置用戶代碼以初始化頁面
   if(!Page.IsPostBack)
   {
    DataGrid1DataBind(1);
   }
  }

  private void DataGrid1DataBind(int page)
  {
   SqlConnection conn = new SqlConnection("server=qq;uid=sa;pwd=***;database=testdb");

   SqlCommand cmd = new SqlCommand("page",conn);
   cmd.CommandType = CommandType.StoredProcedure;

   SqlParameter p1 = cmd.Parameters.Add("@RecordCount",SqlDbType.Int);
   p1.Direction = ParameterDirection.Output;
   SqlParameter p = cmd.Parameters.Add("@PageCurrent",SqlDbType.Int);
   p.Value = page;

   SqlDataAdapter da  = new SqlDataAdapter();
   DataSet ds = new DataSet();
   da.SelectCommand = cmd;
   da.Fill(ds);
   DataGrid1.DataSource = ds.Tables[0].DefaultView;
   int count = int.Parse(cmd.Parameters["@RecordCount"].Value.ToString());
   if(null == ViewState["page"] || "" == ViewState["page"].ToString())
   {
    ViewState["page"] = count.ToString();
   }
   else
   {
    count = int.Parse(ViewState["page"].ToString());
   }


   DataGrid1.VirtualItemCount = count;

   DataGrid1.DataBind();
  }

  private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
  {
   DataGrid1.CurrentPageIndex = e.NewPageIndex;
   DataGrid1DataBind(e.NewPageIndex + 1);
  } 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章