publicclass DataGridPage : System.Web.UI.Page { protected System.Web.UI.WebControls.DataGrid DataGrid1; protected UserControl.Pager Pager1;//定义用户控件,根据用户控件所在目录做适当的调整 protected System.Web.UI.WebControls.DataList DataList1; protected System.Web.UI.WebControls.Repeater Repeater1; publicstaticstring ConnectionString=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]; privatevoid Page_Load(object sender, System.EventArgs e) { if (!this.IsPostBack) { BindData(); } } Bind Data#region Bind Data privatevoid BindData() { int output=0; this.SortExpression="UserID asc"; this.FilterExpression="1=1"; ds = GetList(this.Pager1.CurrentPageIndex,this.Pager1.PageSize,this.SortExpression,this.FilterExpression,ref output); if (ds!=null&& ds.Tables.Count>0) { //DataGrid分页 DataGrid1.DataSource = ds.Tables[0]; DataGrid1.DataBind(); //DataList分页 DataList1.DataSource=ds.Tables[0]; DataList1.DataBind(); //Repeater分页 Repeater1.DataSource=ds.Tables[0]; Repeater1.DataBind(); } Pager1.RecordCount=output; } #endregion ExecSPDataSet#region ExecSPDataSet publicstatic DataSet ExecSPDataSet(string sql,System.Data.IDataParameter[] paramers) { SqlConnection conn=new SqlConnection(ConnectionString); SqlCommand sqlcom=new SqlCommand(sql,conn); sqlcom.CommandType= CommandType.StoredProcedure ; foreach(System.Data.IDataParameter paramer in paramers) { sqlcom.Parameters.Add(paramer); } conn.Open(); SqlDataAdapter da=new SqlDataAdapter(); da.SelectCommand=sqlcom; DataSet ds=new DataSet(); da.Fill(ds); conn.Close(); return ds; } #endregion GetList#region GetList publicstatic DataSet GetList(int page_num,int row_in_page,string order_column,string comb_condition,refint output) { string sql="tp_Fetch_List"; System.Data.SqlClient.SqlParameter[] p=new SqlParameter[5]; p[0]=new SqlParameter(); p[0].ParameterName ="@page_num"; p[0].Value =page_num; p[0].DbType=System.Data.DbType.Int32; p[1]=new SqlParameter(); p[1].ParameterName ="@row_in_page"; p[1].Value =row_in_page; p[1].DbType=System.Data.DbType.Int32; p[2]=new SqlParameter(); p[2].ParameterName ="@order_column"; p[2].Value =order_column; p[2].DbType=System.Data.DbType.String; p[3]=new SqlParameter(); p[3].ParameterName ="@row_total"; p[3].Direction=System.Data.ParameterDirection.Output; p[3].DbType=System.Data.DbType.Int32; p[4]=new SqlParameter(); p[4].ParameterName ="@comb_condition"; p[4].Value =comb_condition; p[4].DbType=System.Data.DbType.String; DataSet ds=ExecSPDataSet(sql,p); if (p[3].Value!=DBNull.Value && p[3].Value.ToString()!=string.Empty ) output=Convert.ToInt32(p[3].Value); return ds; } #endregion property#region property private DataSet ds { get { return ViewState["ds"] as DataSet; } set { ViewState["ds"] = value; } } publicstring FilterExpression { get { if (this.ViewState["FilterExpression"]!=null) return (string)this.ViewState["FilterExpression"]; returnstring.Empty ; } set { this.ViewState["FilterExpression"]=value; } } publicstring SortExpression { get { if (this.ViewState["SortExpression"]!=null) return (string)this.ViewState["SortExpression"]; returnstring.Empty ; } set { this.ViewState["SortExpression"]=value; } } #endregion Web Form Designer generated code#region Web Form Designer generated code overrideprotectedvoid OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); this.Pager1.NavigationClick+=new EventHandler(Pager1_NavigationClick); } /**////<summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///</summary> privatevoid InitializeComponent() { this.Load +=new System.EventHandler(this.Page_Load); } #endregion privatevoid Pager1_NavigationClick(object sender, EventArgs e) { BindData(); } }
6.测试表结构
ifexists (select*from dbo.sysobjects where id =object_id(N'[dbo].[TestGrid]') andOBJECTPROPERTY(id, N'IsUserTable') =1) droptable[dbo].[TestGrid] GO CREATETABLE[dbo].[TestGrid] ( [UserID][int]NOTNULL , [UserName][nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [Country][nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [State][nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [Enabled][bit]NULL ) ON[PRIMARY] GO
7.测试存储过程
createPROCEDURE tp_Fetch_List( @page_numINT, @row_in_pageINT, @order_columnVARCHAR(50), @row_totalINT OUTPUT, @comb_conditionVARCHAR(500) ) AS BEGIN SET NOCOUNT ON DECLARE @jcc_statusINT, @sqlNVARCHAR(4000), @row_aheadINT SET@jcc_status=0 SET@row_ahead= (@page_num-1) *@row_in_page SET@sql='SELECT TOP '+cast(@row_in_pageasvarchar(255)) +' * FROM ( ' SET@sql=@sql+'SELECT * FROM TestGrid ) as A where 1=1' IFLEN(@comb_condition)>0 SET@sql=@sql+' AND ('+@comb_condition+')' SET@sql=@sql+'and UserID not in ( select UserID from (' SET@sql=@sql+'SELECT TOP '+cast(@row_aheadasvarchar(255)) +' * From (' SET@sql=@sql+'SELECT * FROM TestGrid ) as A where 1=1' IFLEN(@comb_condition)>0 SET@sql=@sql+' AND ( '+@comb_condition+' )' IFLEN(@order_column)>0 BEGIN SET@sql=@sql+' ORDER BY '+@order_column+' ) AS B )' END ELSE BEGIN SET@sql=@sql+' ) AS B )' END IFLEN(@order_column)>0 BEGIN SET@sql=@sql+' ORDER BY '+@order_column END print@sql EXEC (@sql) SET@sql= N'SELECT @row_total=COUNT(*) FROM (' SET@sql=@sql+'SELECT * FROM TestGrid ) as A where 1=1' IFLEN(@comb_condition)>0 SET@sql=@sql+' AND ('+@comb_condition+')' print@sql EXEC sp_executesql @sql,N'@row_total INT OUT',@row_total OUT IF@@ERROR!=0 BEGIN SELECT@jcc_status=-98 END exit_bk: -- exit with MS SQL Server error IF@jcc_status=-98 BEGIN RAISERROR ('MS SQL Server error, please contact your system administrator.',16,1)WITH NOWAIT RETURN (@jcc_status) END -- normal exit RETURN (0) END GO -- declare @aa int -- exec tp_Fetch_List 1,10,'',@aa out ,'1=1' -- select @aa