C#学习记录(四)------分页虚基类

参考原有的分页虚基类写的   还有一些地方记不太清   所以记录一下

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OracleClient;
using System.Xml;
using NTPS.BASECLASS;

namespace NTPS.BASECLASS
{
    public abstract class ListPager : System.Web.UI.Page
    {
        TextBox hidPageSize;
        //每页显示最大数
        private int pageMaxSize = PagerConstant.MAX_PAGER_NUM;

        public int PageMaxSize
        {
            get { return pageMaxSize; }
            set { pageMaxSize = value; }
        }

        //查询的类型
        public enum SearchType
        {
            //首页
            First,
            //前页
            Previous,
            //次页
            Next,
            //尾页
            Last,
            //刷新
            Refresh,
            //转到
            TurnTo
        }

        /// <summary>
        /// 首页查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            Search(SearchType.First);
        }

        /// <summary>
        /// 前页查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnPrevious_Click(object sender, EventArgs e)
        {
            Search(SearchType.Previous);
        }

        /// <summary>
        /// 次页查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnNext_Click(object sender, EventArgs e)
        {
            Search(SearchType.Next);
        }

        /// <summary>
        /// 尾页查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnLast_Click(object sender, EventArgs e)
        {
            Search(SearchType.Last);
        }

        /// <summary>
        /// 转到查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnTurnTo_Click(object sender, EventArgs e)
        {
            Search(SearchType.TurnTo);
        }

        /// <summary>
        /// 数据绑定
        /// </summary>
        /// <param name="repeater">需要数据绑定的空间</param>
        /// <param name="dt">获取的数据表</param>
        private static void BindData(Repeater repeater, DataTable dt)
        {
            if (repeater != null)
            {
                repeater.DataSource = dt;
                repeater.DataBind();
            }
        }

        /// <summary>
        /// 无查询条件时,加载首页
        /// </summary>
        /// <returns></returns>
        public DataTable Search()
        {
            return Search(SearchType.First);
        }

        /// <summary>
        /// 获取当前页面页数
        /// </summary>
        /// <param name="searchType">查询类型</param>
        /// <param name="pageSizeText">页面显示文本</param>
        /// <returns>当前页数</returns>
        private int GetCurrentPageNo(SearchType searchType, string pageSize)
        {
            int currentPageNo = 0;
            if (!SearchType.First.Equals(searchType))
            {
                if (!CheckUtility.IsEmpty(pageSize))
                {
                    string[] size = pageSize.Trim().Split('|');
                    currentPageNo = int.Parse(size[0].Replace("第<span class='right-text'> ", "").Replace("</span> 页", ""));
                }
            }
            return currentPageNo;
        }

        /// <summary>
        /// 获取最大页数
        /// </summary>
        /// <param name="cmdText">command执行命令</param>
        /// <returns>返回页数</returns>
        private int FetchMaxNo(string cmdText)
        {
            cmdText = this.cmdTextReplace(cmdText);
            DbUtility du = new DbUtility(cmdText);
            object result = du.ExecuteQuery(cmdText);
            int count = 0;
            if (result != null)
            {
                count = Convert.ToInt32(result);
            }

            int maxPageNo = count / pageMaxSize;

            if (count % pageMaxSize != 0)
            {
                maxPageNo++;
            }
            return maxPageNo;
        }

        /// <summary>
        /// 获取当前页面页码状态,并设置画面显示效果
        /// </summary>
        /// <param name="searchType">查询类型</param>
        /// <param name="firstButton">首页按钮</param>
        /// <param name="previousButton">前页按钮</param>
        /// <param name="nextButton">次页按钮</param>
        /// <param name="lastButton">尾页按钮</param>
        /// <param name="pageSize">页码显示</param>
        /// <param name="maxPageNo">最大页码数</param>
        /// <param name="currentPageNo">当前页码数</param>
        /// <returns>返回设置后当前页码数</returns>
        private int SetDisplayAttribute(SearchType searchType, LinkButton firstButton, LinkButton previousButton, LinkButton nextButton, LinkButton lastButton, HtmlTableCell pageSize, int maxPageNo, int currentPageNo)
        {
            if (SearchType.First.Equals(searchType))
            {
                currentPageNo = 1;
            }
            else if (SearchType.Previous.Equals(searchType))
            {
                currentPageNo--;
            }
            else if (SearchType.Next.Equals(searchType))
            {
                currentPageNo++;
            }
            else if (SearchType.Last.Equals(searchType))
            {
                currentPageNo = maxPageNo;
            }
            else if (SearchType.Refresh.Equals(searchType))
            {
                if (currentPageNo == 0)
                {
                    currentPageNo++;
                }
            }
            else
            {
                TextBox dePage = Page.FindControl("txtDestinationPage") as TextBox;
                if (!CheckUtility.IsEmpty(dePage.Text))
                {
                    if (dePage.Text.Length > 10)
                    {
                        currentPageNo = Convert.ToInt32(dePage.Text.Substring(0, 9));
                        dePage.Text = maxPageNo.ToString();
                    }
                    else if (Int32.Parse(dePage.Text.ToString().Trim()) > maxPageNo && dePage.Text.Length < 10)
                    {
                        currentPageNo = maxPageNo;
                        dePage.Text = maxPageNo.ToString();
                    }
                    else
                    {
                        currentPageNo = Convert.ToInt32(dePage.Text);
                        dePage.Text = Convert.ToString(Int32.Parse(dePage.Text.ToString().Trim()));
                    }
                }
            }
            if (currentPageNo < maxPageNo)
            {
                nextButton.Enabled = true;
                lastButton.Enabled = true;
            }
            else
            {
                currentPageNo = maxPageNo;
                nextButton.Enabled = false;
                lastButton.Enabled = false;
            }

            if (currentPageNo > 1)
            {
                firstButton.Enabled = true;
                previousButton.Enabled = true;
            }
            else
            {
                firstButton.Enabled = false;
                previousButton.Enabled = false;
            }

            pageSize.InnerHtml = "第<span class='right-text'> " + currentPageNo + "</span> 页 | 共 <span class='right-text'>" + maxPageNo + "</span> 页";

            if (hidPageSize != null)
            {
                hidPageSize.Text = currentPageNo + "/" + maxPageNo;
            }

            return currentPageNo;
        }

        /// <summary>
        /// 根据查询条件,将数据绑定到控件当中
        /// </summary>
        /// <param name="searchType">查询类型</param>
        /// <returns>数据表</returns>
        protected DataTable Search(SearchType searchType)
        {
            //首页Button
            LinkButton firstButton = Page.FindControl("lkbtnFirst") as LinkButton;
            //前页Button
            LinkButton previousButton = FindControl("lkbtnPrevious") as LinkButton;
            //次页Button
            LinkButton nextButton = FindControl("lkbtnNext") as LinkButton;
            //尾页Button
            LinkButton lastButton = FindControl("lkbtnLast") as LinkButton;
            //转到页Button
            Button turntoButton = FindControl("btnTurnTo") as Button;
            //页码
            HtmlTableCell pageSize = FindControl("tdPageSize") as HtmlTableCell;
            //页码(隐藏域)
            hidPageSize = FindControl("hidPageSize") as TextBox;
            //目标页码
            TextBox dePage = FindControl("txtDestinationPage") as TextBox;
            //数据显示空间Repeater
            Repeater repeater = FindControl("repeaterData") as Repeater;

            //最大页数
            int maxPageNo = 0;
            //当前页码
            int currentPageNo = GetCurrentPageNo(searchType, pageSize.InnerText);

            DataTable dt = new DataTable();
            OracleCommand SearchCommand = GetOracleCommand();
            if (SearchCommand != null)
            {
                DbUtility du = new DbUtility();
                string commandText = SearchCommand.CommandText;
                // 最大页码取得
                maxPageNo = FetchMaxNo(commandText);

                if (maxPageNo == 0)
                {
                    // 数据绑定
                    BindData(repeater, dt);

                    pageSize.InnerText = "";
                    firstButton.Enabled = false;
                    previousButton.Enabled = false;
                    nextButton.Enabled = false;
                    lastButton.Enabled = false;
                    turntoButton.Enabled = false;
                    //dePage.Enabled = false;
                    return dt;
                }

                if (maxPageNo < 2)
                {
                    turntoButton.Enabled = false;
                }
                else
                {
                    turntoButton.Enabled = true;
                }
                currentPageNo = SetDisplayAttribute(searchType, firstButton, previousButton, nextButton, lastButton, pageSize, maxPageNo, currentPageNo);
                SearchCommand.CommandText = commandText;

                dt = du.ExecuteQuery(SearchCommand, (currentPageNo - 1) * pageMaxSize, pageMaxSize);
            }
            else
            {
                firstButton.Enabled = false;
                previousButton.Enabled = false;
                nextButton.Enabled = false;
                lastButton.Enabled = false;
                turntoButton.Enabled = false;
            }

            BindData(repeater, dt);
            return dt;
        }

        /// <summary>
        /// cmdText转换,将原有cmdText字符串转换成查询count的命令字符串
        /// </summary>
        /// <param name="cmdText">原查询命令字符串</param>
        /// <returns>返回需要的字符串</returns>
        private string cmdTextReplace(string cmdText)
        {
            string newCmdText = "SELECT COUNT(*) FROM (" + cmdText + ")";
            return newCmdText;
        }

        /// <summary>
        /// OracleCommand命令创建虚函数,要实现OracleCommand的完整实现,包括CommandText和CommandParameter
        /// </summary>
        /// <param name="cmdText">执行命令的语句</param>
        /// <param name="ct">执行命令的类型:Procedure or Text or TableDirect</param>
        /// <param name="paras">执行命令所需要的参数</param>
        /// <returns>返回Oracle命令</returns>
        public abstract OracleCommand GetOracleCommand();

    }
}


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值