gridview 自定义分页

代码:

 //总记录数
    private int TotalCountRecord;
    //每页显示的条数
    private int PageItem = 5;
    //当前页
    private int CurrentPage = 1;
    private string strUrl = string.Empty;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["page"] != null)
        {
            if (!Int32.TryParse(Request.QueryString["page"].ToString(), out CurrentPage))
            {
                Response.Write("请输入整数页");
                Response.End();
                return;
            }

        }
        if (!this.IsPostBack)
        {
            this.BindData();
            BuildPagers();
        }
    }
    public void BindData()
    {
        string strWhere = string.Empty;

        if (Request.QueryString["kid"] != null)
        {
            int NewsKindId = Convert.ToInt32(Request.QueryString["kid"]);
            if (Request.QueryString["key"] != null)
            {
                string key = Convert.ToString(Request.QueryString["key"]);
                strWhere = string.Format("NewsKindId={0} and NewsTitle like '%{1}%'", NewsKindId, key);
                strUrl = string.Format("&key={0}&kid={1}", key,NewsKindId);
            }
            else
            {
                string key = Convert.ToString(Request.QueryString["key"]);
                strWhere = string.Format("NewsKindId={0}",NewsKindId);
                strUrl = string.Format("&kid={0}",NewsKindId);
            }
        }
        else
        {
            if (Request.QueryString["key"] != null)
            {
                string key = Convert.ToString(Request.QueryString["key"]);
                strWhere = string.Format("NewsTitle like '%{0}%'",key);
                strUrl = string.Format("&key={0}", key);
            }
        }
        this.GridNews.DataSource = News.GetAllNewsByStrWhere(PageItem, CurrentPage, strWhere, out TotalCountRecord);
        this.GridNews.DataBind();
    }
    public void BuildPagers()
    {
        //偏移量
        int Step = 10;
        int LeftNum = 0;
        int RightNum = 0;
        string PageUrl = Request.FilePath;
        int PageCount = (int)Math.Ceiling((double)(TotalCountRecord) / PageItem);
        if (CurrentPage - Step < 1)
        {
            LeftNum = 1;
        }
        else
        {
            LeftNum = CurrentPage - Step;
        }

        if (CurrentPage + Step > PageCount)
        {
            RightNum = PageCount;
        }
        else
        {
            RightNum = CurrentPage + Step;
        }
        StringBuilder OutPut = new StringBuilder();

        for (int i = LeftNum; i <= RightNum; i++)
        {
            if (i == CurrentPage)
            {
                OutPut.Append("<font style='margin-left:3px;' color=red>");
                OutPut.Append(i.ToString());
                OutPut.Append("</font>");
            }
            else
            {
                OutPut.Append("<a style='margin-left:3px;' href='");
                OutPut.Append(PageUrl);
                OutPut.Append("?page=");
                OutPut.Append(i.ToString());
                OutPut.Append(strUrl);
                OutPut.Append("'>");
                OutPut.Append(i.ToString());
                OutPut.Append("</a>");
            }
        }

        if (CurrentPage > 1)
        {
            OutPut.Insert(0, string.Format("<a href='{0}?page={1}{2}'>上一页</a>", PageUrl, (CurrentPage - 1), strUrl));
        }

        if (CurrentPage < PageCount)
        {
            OutPut.Append("<a href='");
            OutPut.Append(PageUrl);
            OutPut.Append("?page=");
            OutPut.Append(CurrentPage + 1);
            OutPut.Append(strUrl);
            OutPut.Append("'>下一页</a></li>");
        }
        this.PageInfo.Text = OutPut.ToString();
        this.LabCount.Text = string.Format("总记录数:<font color='red'>{0}</font>  总页数:<font color='red'>{1}</font>", TotalCountRecord, PageCount);
    } 

存储过程:

CREATE PROCEDURE usp_PagingLarge
@TableNames VARCHAR(300),    --表名,可以是多个表,但不能用别名
@PrimaryKey VARCHAR(100),    --主键,可以为空,但@Order为空时该值不能为空
@Fields    VARCHAR(350),        --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@PageSize INT,            --每页记录数
@CurrentPage INT,        --当前页,0表示第1页
@Filter VARCHAR(200) = '',    --条件,可以为空,不用填 where
@Group VARCHAR(200) = '',    --分组依据,可以为空,不用填 group by
@Order VARCHAR(200) = '',   --排序,可以为空,为空默认按主键升序排列,不用填 order by
@RecordCount int = 0 output
AS
BEGIN
    DECLARE @SortColumn VARCHAR(200)
    DECLARE @Operator CHAR(2)
    DECLARE @SortTable VARCHAR(200)
    DECLARE @SortName VARCHAR(200)
    DECLARE @TmpSelect  NVarchar(200)
    IF @Fields = ''
        SET @Fields = '*'
    IF @Filter = ''
        SET @Filter = 'WHERE 1=1'
    ELSE
        SET @Filter = 'WHERE ' +  @Filter
    IF @Group <>''
        SET @Group = 'GROUP BY ' + @Group

    IF @Order <> ''
    BEGIN
        DECLARE @pos1 INT, @pos2 INT
        SET @Order = REPLACE(REPLACE(@Order, ' asc', ' ASC'), ' desc', ' DESC')
        IF CHARINDEX(' DESC', @Order) > 0
            IF CHARINDEX(' ASC', @Order) > 0
            BEGIN
                IF CHARINDEX(' DESC', @Order) < CHARINDEX(' ASC', @Order)
                    SET @Operator = '<='
                ELSE
                    SET @Operator = '>='
            END
            ELSE
                SET @Operator = '<='
        ELSE
            SET @Operator = '>='
        SET @SortColumn = REPLACE(REPLACE(REPLACE(@Order, ' ASC', ''), ' DESC', ''), ' ', '')
        SET @pos1 = CHARINDEX(',', @SortColumn)
        IF @pos1 > 0
            SET @SortColumn = SUBSTRING(@SortColumn, 1, @pos1-1)
        SET @pos2 = CHARINDEX('.', @SortColumn)
        IF @pos2 > 0
        BEGIN
            SET @SortTable = SUBSTRING(@SortColumn, 1, @pos2-1)
            IF @pos1 > 0
                SET @SortName = SUBSTRING(@SortColumn, @pos2+1, @pos1-@pos2-1)
            ELSE
                SET @SortName = SUBSTRING(@SortColumn, @pos2+1, LEN(@SortColumn)-@pos2)
        END
        ELSE
        BEGIN
            SET @SortTable = @TableNames
            SET @SortName = @SortColumn
        END
    END
    ELSE
    BEGIN
        SET @SortColumn = @PrimaryKey
        SET @SortTable = @TableNames
        SET @SortName = @SortColumn
        SET @Order = @SortColumn
        SET @Operator = '>='
    END

    DECLARE @type varchar(50)
    DECLARE @prec int
    SELECT @type=t.name, @prec=c.prec
    FROM sysobjects o
    JOIN syscolumns c on o.id=c.id
    JOIN systypes t on c.xusertype=t.xusertype
    WHERE o.name = @SortTable AND c.name = @SortName
    IF CHARINDEX('char', @type) > 0
    SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
  
    DECLARE @TopRows INT
    SET @TopRows = @PageSize * @CurrentPage + 1
    print @TopRows
    print @Operator
    EXEC('
        DECLARE @SortColumnBegin ' + @type + '
        SET ROWCOUNT ' + @TopRows + '
        SELECT @SortColumnBegin=' + @SortColumn + ' FROM  ' + @TableNames + ' ' + @Filter + ' ' + @Group + ' ORDER BY ' + @Order + '
        SET ROWCOUNT ' + @PageSize + '
        SELECT ' + @Fields + ' FROM  ' + @TableNames + ' ' + @Filter  + ' AND ' + @SortColumn + '' + @Operator + '@SortColumnBegin ' + @Group + ' ORDER BY ' + @Order + '   
    ')
    DECLARE @str_Count_SQL nvarchar(500)
    SET @str_Count_SQL= 'SELECT @TotalCount=count('+@PrimaryKey+') FROM ' + @TableNames + ' ' + @Filter
    EXEC sp_executesql @str_Count_SQL,N'@TotalCount int=0 output',@RecordCount output
End
GO

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值