存储过程分页 及其排序 完整代码 .net C#
来源:互联网 发布:日系女鞋品牌知乎 编辑:程序博客网 时间:2024/05/21 06:45
ALTER proc CP_Page_Control_RowNumber
@PageSize int,
@PageIndex int,
@OrderBy nvarchar(100),
@SelectSQl nvarchar(MAX),
@recordCount INT OUTPUT
as
DECLARE @SQL nvarchar(MAX)
DECLARE @sqlcount nvarchar(MAX)
DECLARE @UP int
SET @UP=@PageSize*(@PageIndex-1)
SET @sqlcount = N'SELECT @Count = COUNT(*) FROM (' + @SelectSQl + ') PageA '
EXEC SP_EXECUTESQL @sqlcount,N'@Count INT OUTPUT',@Count=@recordCount OUTPUT
SET @SQL='
WITH OrderedOrders AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY '+@OrderBy+') as RowNumber FROM ('+@SelectSQl+') as T )
SELECT *
FROM OrderedOrders
WHERE RowNumber between '+str(@UP)+' and '+str(@UP+@PageSize-1)
EXEC SP_EXECUTESQL @SQL
存储过程
ALTER PROCEDURE [dbo].[ListPage](
@tblName nvarchar(500), ----要显示的表或多个表的连接
@fldName nvarchar(400) = '*', ----要显示的字段列表
@pageSize int = 8, ----每页显示的记录个数
@page int = 1, ----要显示那一页的记录
@pageCount int = 1 output, ----查询结果分页后的总页数
@Counts int = 1 output, ----查询到的记录数
@fldSort nvarchar(100) = null, ----排序字段列表或条件
@Sort bit = 0, ----排序方法,0为升序,1为降序
@strCondition nvarchar(400) = null, ----查询条件,不需where
@ID nvarchar(50) ----主表的主键
)
AS
SET NOCOUNT ON
Declare @sqlTmp nvarchar(1000) ----存放动态生成的SQL语句
Declare @strTmp nvarchar(1000) ----存放取得查询结果总数的查询语句
Declare @strID nvarchar(1000) ----存放取得查询开头或结尾ID的查询语句
Declare @sqlSort nvarchar(200) ----存放临时生成的排序条件
Declare @intCounts int ----要移动的记录数
Declare @BeginID varchar(50) ----开始的ID
--------首先生成排序方法---------
if @Sort=0 --升序
begin
if not(@fldSort is null)
set @sqlSort = ' Order by ' + @fldSort
else
set @sqlSort = ' Order by ' + @ID
end
else --降序
begin
if not(@fldSort is null)
set @sqlSort = ' Order by ' + @fldSort + ' DESC '
else
set @sqlSort = ' Order by ' + @ID + ' DESC '
end
--------生成查询语句--------
--此处@strTmp为取得查询结果数量的语句
if @strCondition is null --没有设置显示条件
begin
set @sqlTmp = @fldName + ' From ' + @tblName
set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName
set @strID = ' From ' + @tblName +' '+@sqlSort
end
else
begin
set @sqlTmp = + @fldName + ' From ' + @tblName + ' where ' + @strCondition
set @strTmp = 'select @Counts=Count(' + @ID + ') FROM '+@tblName + ' where ' + @strCondition
set @strID = ' From ' + @tblName + ' where ' + @strCondition+' '+@sqlSort
end
----取得查询结果总数量-----
exec sp_executesql @strTmp,N'@Counts int out ',@Counts out
--取得分页总数
if @Counts <= @pageSize
set @pageCount = 1
else
set @pageCount = (@Counts / @pageSize) + 1
--计算要移动的记录数
if @page = 1
set @intCounts = @pageSize
else
begin
set @intCounts = (@page) * @pageSize
end
-----取得分页后此页的第一条记录的ID
set @strID = 'select @BeginID=' + @fldSort + ' ' + @strID
set @intCounts = @intCounts - @pageSize +1
set rowcount @intCounts
exec sp_executesql @strID,N'@BeginID varchar(50) out ',@BeginID out
------恢复系统设置-----
set rowcount 0
SET NOCOUNT OFF
------返回查询结果-----
if @strCondition is null
begin
if @Sort=1
set @strTmp = ' select top 8 ' + @sqlTmp + ' where ' + @fldSort + ' <=''' + @BeginID + ''' '
else
set @strTmp = ' select top 8 ' + @sqlTmp + ' where ' + @fldSort + ' >=''' + @BeginID + ''' '
end
else
begin
if @Sort=1
set @strTmp = ' select top 8 ' + @sqlTmp + ' and ' + @fldSort + ' <=''' + @BeginID + ' '' '
else
set @strTmp = ' select top 8 ' + @sqlTmp + ' and ' + @fldSort + ' >=''' + @BeginID + ''' '
end
if not(@sqlSort is null)
set @strTmp = @strTmp + @sqlSort
exec sp_executesql @strTmp
//----------d 层
public System.Collections.ArrayList PageStoreFillDataTable(string cmdText, SqlParameter[] inputParameters, SqlParameter[] outputParameters)
{
System.Data.DataTable dt = new DataTable();
System.Collections.ArrayList ilist = new System.Collections.ArrayList();
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(DataAccess.GetConnString()))
{
PrepareCommand(cmd, conn, null, CommandType.StoredProcedure, cmdText, inputParameters, outputParameters);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
adp.Fill(dt);
ilist.Add(dt);
if (outputParameters != null)
{
foreach (SqlParameter parm in outputParameters)
ilist.Add(parm.Value.ToString());
}
cmd.Parameters.Clear();
}
return ilist;
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
public static System.Collections.ArrayList PageStore(string tblName, string fldName, int pageSize, int page, string strCondition, string fldSort, int Sort, string ID)
{
SqlParameter[] inputparameters = new SqlParameter[8];
inputparameters[0] = new SqlParameter("@tblName", tblName);
inputparameters[1] = new SqlParameter("@fldName", fldName);
inputparameters[2] = new SqlParameter("@pageSize", pageSize);
inputparameters[3] = new SqlParameter("@page", page);
inputparameters[4] = new SqlParameter("@strCondition", strCondition);
inputparameters[5] = new SqlParameter("@fldSort", fldSort);
inputparameters[6] = new SqlParameter("@Sort", Sort);
inputparameters[7] = new SqlParameter("@ID", ID);
SqlParameter[] outputparameters = new SqlParameter[1];
outputparameters[0] = new SqlParameter("@Counts", SqlDbType.Int);
DataSet ds=new DataSet();
return GetDataAccess().PageStoreFillDataTable("ListPage",inputparameters,outputparameters);
}
//web---层
/// <summary>
/// 数据绑定
/// </summary>
private void databind()
{
System.Collections.ArrayList list = bg.GetdataBudgetCollectSct(int.Parse(DSState.SelectedValue), 39, AllocateDateFir.Text, AllocateDateEnd.Text, UserAddress.Text, SLProcessNo.Text, PageControl1.GetPageCurrent(), int.Parse(Sort), GridViewSortExpression);
GRProjectlist.DataSource = (DataTable)list[0];
GRProjectlist.DataBind();
PageControl1.getViewState(int.Parse(list[1].ToString()));
PageControl1.WritePageNo(PageControl1.GetPageCurrent(), int.Parse(list[1].ToString()));
}
#region 排序
protected void GRProjectlist_Sorting(object sender, GridViewSortEventArgs e)
{
GridViewSortExpression = e.SortExpression.ToString();
GridViewSortDirection();
databind();
}
private string Sort
{
get { return ViewState["SortDirection"] as string ?? "1"; }
set { ViewState["SortDirection"] = value; }
}
private string GridViewSortDirection()
{
if (Sort == "1")
{
Sort = "0";
}
else
{
Sort = "1";
}
return Sort;
}
private string GridViewSortExpression
{
get { return ViewState["SortExpression"] as string ?? "NodeBeginTime"; }
set { ViewState["SortExpression"] = value; }
}
#endregion
//用户控件
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PageControl.ascx.cs" Inherits="UserAscx_PageControl" %>
<div id="LinkButtonCss"><div id='pagenumber' style='text-align:center; ' runat="server"> </div></div>
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class UserAscx_PageControl : System.Web.UI.UserControl
{
public delegate void PageClick();
public PageClick pageclick = null;
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
if (ViewState["Count"] != null)
{
WritePageNo(GetPageCurrent(), int.Parse(ViewState["Count"].ToString()));
}
}
}
protected void LinkButton_Click(object sender, EventArgs e)//委托按钮时间 delegate button EventArgs
{
int Currentpage;
if (pageclick != null)
{
switch (((LinkButton)sender).Text)
{
case "首页":
Currentpage = 1;
break;
case "末页":
Currentpage = (int.Parse(ViewState["Count"].ToString())-1)/8+1;
break;
case "上一页":
Currentpage = GetPageCurrent() - 1;
break;
case "下一页":
Currentpage = GetPageCurrent() + 1; ;
break;
default:
Currentpage = int.Parse(((LinkButton)sender).Text);
break;
}
ViewState["ButtonPage"] = Currentpage;
pagenumber.Controls.RemoveAt(0);
pageclick();
}
}
public void getViewState(int Count)//获取页面总页 get pagecount
{
ViewState["Count"] = Count;
}
public int GetPageCurrent()//获取当前页面页数 Get PageCurrent
{
int PageCurrent;
if (ViewState["ButtonPage"] == null)
{
PageCurrent = 1;
}
else
{
PageCurrent = int.Parse(ViewState["ButtonPage"].ToString());
}
return PageCurrent;
}
private void BaseWrite(int ReturnPage, int Count)//写下数字页数 writebase number page
{
Unit u = new Unit(12);
for (int i = ReturnPage; i <= Count; i++)
{
LinkButton link = new LinkButton();
link.Text = i.ToString();
link.ID = "LinkButton_" + i.ToString();
link.Width = u;
link.Click += new EventHandler(LinkButton_Click);
pagenumber.Controls.Add(link);
}
}
private void FristPage()//首页
{
Unit u = new Unit(40);
LinkButton link = new LinkButton();
link.Text = "首页";
link.ID = "FristPageLink_1";
link.Width = u;
link.Click += new EventHandler(LinkButton_Click);
pagenumber.Controls.Add(link);
}
private void EndPage(int Count)//最后一页码
{
Unit u = new Unit(40);
LinkButton link = new LinkButton();
link.Text = "末页";
link.ID = "EndPageLink_" + Count;
link.Width = u;
link.Click += new EventHandler(LinkButton_Click);
pagenumber.Controls.Add(link);
}
private void UpPage()//首页
{
Unit u = new Unit(40);
LinkButton link = new LinkButton();
link.Text = "上一页";
link.ID = "UpPage_1";
link.Width = u;
link.Click += new EventHandler(LinkButton_Click);
pagenumber.Controls.Add(link);
}
private void DownPage()//最后一页码
{
Unit u = new Unit(40);
LinkButton link = new LinkButton();
link.Text = "下一页";
link.ID = "DownPage_1";
link.Width = u;
link.Click += new EventHandler(LinkButton_Click);
pagenumber.Controls.Add(link);
}
private void WriteTotalPage(int allpagenumber)//最后一页码
{
Label label = new Label();
label.Text = "共有" + allpagenumber.ToString() + "条记录,每页8条,共" + ((allpagenumber-1) / 8 + 1) + "页";
label.ID = "PageLabel";
pagenumber.Controls.Add(label);
}
private void UpDownPage(int pagecout, int requestcout)
{
if (requestcout <= pagecout && requestcout > 1)
{
UpPage(); EndPage(pagecout);
}
if (requestcout < pagecout)
{
DownPage(); FristPage();
}
}
public void WritePageNo(int requestcout, int allpagenumber)
{
int pagecout = (allpagenumber-1) / 8 + 1;
pagenumber.Controls.Clear();
if (pagecout > 1)
{
if (pagecout <= 8)
{
if (requestcout <= pagecout && requestcout > 1)
{
FristPage(); UpPage();
}
BaseWrite(1, pagecout);
if (requestcout < pagecout)
{
DownPage(); EndPage(pagecout);
}
}
else
{
// 最后一排
if (requestcout + 4 > pagecout)
{
FristPage(); UpPage();
BaseWrite(pagecout - 7, pagecout);
if (requestcout < pagecout)
{
DownPage(); EndPage(pagecout);
}
}
else if (requestcout / 4 > 0)
{
FristPage(); UpPage();
BaseWrite(requestcout - 3, requestcout + 4);
DownPage(); EndPage(pagecout);
}
else
{
if (requestcout > 1)
{ FristPage(); UpPage(); }
BaseWrite(1, 8);
DownPage(); EndPage(pagecout);
}
}
((LinkButton)pagenumber.FindControl("LinkButton_" + GetPageCurrent().ToString())).ForeColor = System.Drawing.Color.Red;
}
WriteTotalPage(allpagenumber);
}
}
- 存储过程分页 及其排序 完整代码 .net C#
- 完整的ASP.NET存储过程分页,排序,鼠标移至变色
- asp.net 存储过程分页字段排序
- C#高效分页代码(不用存储过程)
- asp.net利用存储过程分页代码
- 分页存储过程及.NET代码
- 完整的分页存储过程以及c#调用方法
- Asp.net(C#)基于存储过程分页的完整解决方案
- GridView用储存过程做分页的完整C#代码
- C# 存储过程 分页
- C# 存储过程分页
- C#分页存储过程
- 存储过程分页代码
- 存储过程分页代码
- 分页代码(存储过程)
- 存储过程分页代码
- 存储过程分页代码
- 分页存储过程代码
- gridview模板列按钮的使用及获取本行主键值
- div+css - 工具 - 微软印刷技术 - WEFT 3 - 网页嵌入字体3 - 下载
- LCD基础及S3C2410 LCD控制器
- 父子下拉选择菜单
- 使用FreeMarker/Jsp(WebWork2)生成静态/动态RSS文件
- 存储过程分页 及其排序 完整代码 .net C#
- 品质人生——50种珍惜生命的态度
- 极限攀登【转】
- Longhorn beta3的feature
- GVIM C/C++ IDE
- 11月10日火箭vs雄鹿 姚易对战火箭胜出
- 高级研发人员标准【转】
- 遇到问题时怎么办?
- 生活很难