1. 程式人生 > >winform自定義分頁

winform自定義分頁

使用bindingNavigator和bindingSource1自定義分頁元件,實現分頁

/// <summary>
    /// 委託
    /// </summary>
    /// <param name="e"></param>
    /// <returns></returns>
    public delegate int EventPagingHandler(EventPagingArg e);
    public partial class pageControl : UserControl
    {
        public pageControl()
        {
            InitializeComponent();
        }
        public event EventPagingHandler EventPaging;
        private object _sourceobj;//資料來源

        public object Sourceobj
        {
            get { return _sourceobj; }
            set { _sourceobj = value; }
        }
        //每頁記錄數
        private int _pageSize = 5;

        public int PageSize
        {
            get { return _pageSize; }
            set
            {
                _pageSize = value;
                GetPageCount();
            }
        }
        //總記錄數
        private int _PageTotalNum = 0;

        public int PageTotalNum
        {
            get { return _PageTotalNum; }
            set
            {
                _PageTotalNum = value;
                GetPageCount();
            }
        }
        //頁數=總數/每頁記錄數
        private int _pageCount = 0;

        public int PageCount
        {
            get { return _pageCount; }
            set { _pageCount = value; }
        }
        //當前頁
        private int _pageCurrent = 0;

        public int PageCurrent
        {
            get { return _pageCurrent; }
            set { _pageCurrent = value; }
        }
        //頁數
        private void GetPageCount()
        {
            if (this.PageTotalNum > 0)
            {
                this.PageCount = Convert.ToInt32(Math.Ceiling(Convert.ToDouble(this.PageTotalNum) / Convert.ToDouble(this.PageSize)));
            }
            else
            {
                this.PageCount = 0;
            }
        }
        //繫結源
        public void Bind()
        {
            if (this.Sourceobj != null)
            {
                //繫結資料來源
                this.bindingSource1.DataSource = this.Sourceobj;
                this.bindingNavigator1.BindingSource = this.bindingSource1;
            }
            this.FirstItem.Enabled = true;
            this.PreviousItem.Enabled = true;
            this.NextItem.Enabled = true;
            this.LastItem.Enabled = true;

            if (this.EventPaging != null)
            {
                //通過委託事件方法,觸發引用窗體繫結方法獲取
                this.PageTotalNum = this.EventPaging(new EventPagingArg());
            }
            if (this.PageCurrent > this.PageTotalNum)
            {
                this.PageCurrent = this.PageTotalNum;
            }
            if (this.PageCount == 1)
            {
                this.PageCurrent = 1;
            }
            if (PageCurrent == 1)
            {
                this.FirstItem.Enabled = false;
                this.PreviousItem.Enabled = false;
            }
            if (PageCurrent == PageCount)
            {
                this.NextItem.Enabled = false;
                this.LastItem.Enabled = false;
            }
            if (this.PageTotalNum == 0)
            {
                this.FirstItem.Enabled = false;
                this.PreviousItem.Enabled = false;
                this.NextItem.Enabled = false;
                this.LastItem.Enabled = false;
            }

            this.TextPositionItem.Text = PageCurrent.ToString();
            this.TextPositionItem.Enabled = true;
            this.labelCountItem.Text = "共 " + PageCount + " 頁";
            this.labelCountItem.Enabled = false;
        }
        //首頁
        private void FirstItem_Click(object sender, EventArgs e)
        {
            PageCurrent = 1;
            this.Bind();
        }
        //上一頁
        private void PreviousItem_Click(object sender, EventArgs e)
        {
            PageCurrent--;
            if (PageCurrent <= 0)
            {
                PageCurrent = 1;
            }
            this.Bind();
        }
        //下一頁
        private void NextItem_Click(object sender, EventArgs e)
        {
            this.PageCurrent++;
            if (PageCurrent > PageCount)
            {
                PageCurrent = PageCount;
            }
            this.Bind();
        }
        //尾頁
        private void LastItem_Click(object sender, EventArgs e)
        {
            PageCurrent = PageCount;
            this.Bind();
        }
    }
    /// <summary>
    /// 自定義事件資料基類(當前頁數?)
    /// </summary>
    public class EventPagingArg : EventArgs
    {
        public EventPagingArg()
        {
        }
    }

生成元件後,拖到使用的窗體
public partial class Form2 : Form
    {
        DataTable dtpage;
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            this.pageControl1.PageCurrent = 1;
            pageControl1.PageSize = 10;
            this.pageControl1.Bind();
        }
        /// <summary>
        /// 分頁控制元件事件
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private int pageControl1_EventPaging(EventPagingArg e)
        {
            return BindView();
        }
        //VIEW資料來源繫結,並返回資料總條數
        private int BindView()
        {
            dtpage = getdtByNum(pageControl1.PageCurrent, pageControl1.PageSize);
            this.pageControl1.Sourceobj = dtpage;
            this.dataGridView1.DataSource = dtpage;

            return 100;
        }
        //每頁源
        public DataTable getdtByNum(int pageNum, int pageSize)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID", typeof(string));
            dt.Columns.Add("NAME", typeof(string));
            for (int i = (pageNum - 1) * pageSize; i < pageSize * pageNum; i++)
            {
                DataRow dr = dt.NewRow();
                dr["ID"] = i;
                dr["NAME"] = "第" + i + "行";
                dt.Rows.Add(dr);
            }
            return dt;
        }
    }

附程式碼例項下載:http://download.csdn.net/detail/sky08050025/9729815