GridView 真分页 自写控件

由于GridView自身必须加载所有数据,才能正常显示。对于数据量很大的情况下,加载比较慢,所有自己写了个分页控件,不再使用Gridview里面的pageindex和pagecount,用viewstate保存,从而达到真分页,存储过程用ROW_NUMBER实现分页

<table cellpadding='2' cellspacing='0' width="100%">
    <tr>
        <td align="right" style="background-image: url(../../images/datagridbbg.jpg); height: 28px;">
            <asp:Label ID="lblPageInfo" CssClass="Normal" runat="server" Visible="True"></asp:Label>
            <asp:LinkButton ID="lbtnFirstPage" runat="server" CssClass="CommandButton" OnCommand="PagerButton_Click"
                CommandName="FirstPage" CausesValidation="False" Text="首页"></asp:LinkButton>
            <asp:LinkButton ID="lbtnPreviousPage" runat="server" CssClass="CommandButton" OnCommand="PagerButton_Click"
                CommandName="PreviousPage" CausesValidation="False" Text="上一页"></asp:LinkButton>
            <asp:LinkButton ID="lbtnNextPage" runat="server" CssClass="CommandButton" OnCommand="PagerButton_Click"
                CommandName="NextPage" CausesValidation="False" Text="下一页"></asp:LinkButton>
            <asp:LinkButton ID="lbtnLastPage" runat="server" CssClass="CommandButton" OnCommand="PagerButton_Click"
                CommandName="LastPage" CausesValidation="False" Text="尾页"></asp:LinkButton>
            <asp:TextBox ID="txtPageNum" runat="server" Width="41px"></asp:TextBox>
            <asp:CompareValidator ID="cmpValPageNum" CssClass="NormalRed" runat="server" ControlToValidate="txtPageNum"
                Display="Dynamic" ErrorMessage=">0" Operator="GreaterThan" Type="Integer" ValidationGroup="WebUserPager"
                ValueToCompare="0"></asp:CompareValidator>
            <asp:LinkButton ID="lbtnGoto" runat="server" CssClass="CommandButton" OnCommand="PagerButton_Click"
                CommandName="Go" ValidationGroup="WebUserPager" Text="跳转"></asp:LinkButton>
        </td>
    </tr>
</table>


        protected void Page_PreRender(object sender, EventArgs e)
        {
            RefreshUI();
        }
        protected void PagerButton_Click(object sender, CommandEventArgs e)
        {
            switch (e.CommandName)
            {
                case "FirstPage":
                    ViewState["PageIndex"] = 0;
                    break;
                case "PreviousPage":
                    ViewState["PageIndex"] = int.Parse(ViewState["PageIndex"].ToString()) - 1;
                    break;
                case "NextPage":
                    ViewState["PageIndex"] = int.Parse(ViewState["PageIndex"].ToString()) + 1;
                    break;
                case "LastPage":
                    ViewState["PageIndex"] = int.Parse(ViewState["PageCount"].ToString()) - 1;
                    break;
                case "Go":
                    if (this.txtPageNum.Text.Length > 0)
                    {
                        if (Regex.IsMatch(this.txtPageNum.Text, @"^\d*$") && int.Parse(this.txtPageNum.Text) >= 0
                            && int.Parse(this.txtPageNum.Text) < int.Parse(ViewState["PageCount"].ToString()) + 1)
                            ViewState["PageIndex"] = Int32.Parse(txtPageNum.Text) - 1;
                        else
                        {
                            ViewState["PageIndex"] = int.Parse(ViewState["PageCount"].ToString()) - 1;
                            this.txtPageNum.Text = ViewState["PageCount"].ToString();
                        }
                    }
                    else
                        ViewState["PageIndex"] = 0;
                    break;
            }
            BindData();
        }

        public void RefreshUI()
        {

            int pageCount = int.Parse(ViewState["PageCount"].ToString());
            if (pageCount < 2)
            {
                this.lbtnFirstPage.Enabled = false;
                this.lbtnNextPage.Enabled = false;
                this.lbtnPreviousPage.Enabled = false;
                this.lbtnLastPage.Enabled = false;
                this.lbtnGoto.Enabled = false;
                this.txtPageNum.Enabled = false;
            }
            else
            {
                this.lbtnFirstPage.Enabled = true;
                this.lbtnNextPage.Enabled = true;
                this.lbtnPreviousPage.Enabled = true;
                this.lbtnLastPage.Enabled = true;
                this.lbtnGoto.Enabled = true;
                this.txtPageNum.Enabled = true;
                if (int.Parse(ViewState["PageIndex"].ToString()) == 0)
                {

                    this.lbtnFirstPage.Enabled = false;
                    this.lbtnPreviousPage.Enabled = false;
                }
                else if (int.Parse(ViewState["PageIndex"].ToString()) == pageCount - 1)
                {
                    this.lbtnNextPage.Enabled = false;
                    this.lbtnLastPage.Enabled = false;
                }

            }
            this.lblPageInfo.Text = ViewState["PageSummery"] as string;
        }

create Procedure ...  
  @WorkOrder nvarchar(50)
, @ProductNo nvarchar(50)
, @IMEI nvarchar(50)
, @CreateDateFrom datetime
, @CreateDateTo datetime
, @CreateMan nvarchar(50)
, @PageCount int
, @CurrentPageIndex int
As
	with temp as (
	select ROW_NUMBER() over (order by CreateDate desc) as RowId,* from ...
	where (WorkOrder=@WorkOrder or @WorkOrder is Null) and (ProductNo=@ProductNo or @ProductNo is Null) and
	(IMEI=@IMEI or @IMEI is Null) and (CreateMan=@CreateMan or @CreateMan is Null) and
	(CreateDate>=@CreateDateFrom or @CreateDateFrom is Null) and (CreateDate<=@CreateDateTo or @CreateDateTo is Null)
	)
	SELECT * FROM temp where RowId between (@CurrentPageIndex-1)*@PageCount+1 and @CurrentPageIndex*@PageCount
	select count(*) from dbo.CSMS_FeiBaoWorkOrder 
	where (WorkOrder=@WorkOrder or @WorkOrder is Null) and (ProductNo=@ProductNo or @ProductNo is Null) and
	(IMEI=@IMEI or @IMEI is Null) and (CreateMan=@CreateMan or @CreateMan is Null) and
	(CreateDate>=@CreateDateFrom or @CreateDateFrom is Null) and (CreateDate<=@CreateDateTo or @CreateDateTo is Null)
go


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值