c# 分頁

1:首先寫一個分頁控件

如圖:


代碼:

 public partial class ControlPage_QueryData : UserControl
    {
        public DataTable table = new DataTable();

        public ControlPage_QueryData()
        {
            InitializeComponent();
        }

        public ControlPage_QueryData(DataTable dt)
        {
            InitializeComponent();
            table = dt;
        }

        #region 分頁字段和屬性


        private int pageIndex = 1;
        /// <summary>
        /// 當前頁面
        /// </summary>
        public  int PageIndex
        {
            get { return pageIndex; }
            set { pageIndex = value; }
        }


        private int pageSize = 10;
        /// <summary>
        /// 每頁記錄數
        /// </summary>
        public  int PageSize
        {
            get { return pageSize; }
            set { pageSize = value; }
        }


        private int recordCount = 0;
        /// <summary>
        /// 總記錄數
        /// </summary>
        public  int RecordCount
        {
            get { return recordCount; }
            set { recordCount = value; }
        }


        private int pageCount = 0;
        /// <summary>
        /// 總頁數
        /// </summary>
        public int PageCount
        {
            get
            {
                if (pageSize != 0)
                {
                    pageCount = GetPageCount();
                }
                return pageCount;
            }
        }


        /// <summary>
        /// 計算總頁數
        /// </summary>
        /// <returns></returns>
        private int GetPageCount()
        {
            if (PageSize == 0)
            {
                return 0;
            }
            int pageCount = RecordCount / PageSize;
            if (RecordCount % PageSize == 0)
            {
                pageCount = RecordCount / PageSize;
            }
            else
            {
                pageCount = RecordCount / PageSize + 1;
            }
            return pageCount;
        }


        private string jumpText;
        /// <summary>
        /// 跳轉按鈕文本
        /// </summary>
        public string JumpText
        {
            get
            {
                if (string.IsNullOrEmpty(jumpText))
                {
                    jumpText = "Go";
                }
                return jumpText;
            }
            set { jumpText = value; }
        }




        #endregion


        #region 頁碼變化觸發事件


        public event EventHandler OnPageChanged;


        #endregion


        #region 分頁及相關事件功能實現


        private void SetFormCtrEnabled()
        {
            lnk_First.Enabled = true;
            lnk_Prev.Enabled = true;
            lnk_Next.Enabled = true;
            lnk_Last.Enabled = true;
            btn_Go.Enabled = true;
        }


        
        /// <summary>
        /// 外部調用
        /// </summary>
        public void DrawControl(int count)
        {
            recordCount = count;
            DrawControl(false);
        }
        /// <summary>
        /// 頁面控件呈現
        /// </summary>
        private void DrawControl(bool callEvent)
        {
            btn_Go.Text = JumpText;
            lblCurrent_Page.Text = PageIndex.ToString();
            lblPage_Count.Text = PageCount.ToString();
            lblTotal_Count.Text = RecordCount.ToString();
            txtPage_Size.Text = PageSize.ToString();


            if (callEvent && OnPageChanged != null)
            {
                OnPageChanged(this, null);//當前分頁數字改變時,觸發委託事件
            }
            SetFormCtrEnabled();
            if (PageCount == 1)//有且僅有一頁
            {
                lnk_First.Enabled = false;
                lnk_Prev.Enabled = false;
                lnk_Next.Enabled = false;
                lnk_Last.Enabled = false;
                btn_Go.Enabled = false;
            }
            else if (PageIndex == 1)//第一頁
            {
                lnk_First.Enabled = false;
                lnk_Prev.Enabled = false;
            }
            else if (PageIndex == PageCount)//最後一頁
            {
                lnk_Next.Enabled = false;
                lnk_Last.Enabled = false;
            }
        }


        #endregion


     
        bool isTextChanged = false;
       


        private void lnk_First_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            lnk_First.Enabled = false;
            lnk_Prev.Enabled = false;
            lnk_Next.Enabled = true;
            lnk_Last.Enabled = true;
            PageIndex = 1;
            DrawControl(true);
        }


        private void lnk_Prev_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            lnk_First.Enabled = true;
            lnk_Prev.Enabled = true;
            lnk_Next.Enabled = true;
            lnk_Last.Enabled = true;
            PageIndex = Math.Max(1, PageIndex - 1);
            DrawControl(true);
        }


        private void lnk_Next_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            lnk_First.Enabled = true;
            lnk_Prev.Enabled = true;
            lnk_Next.Enabled = true;
            lnk_Last.Enabled = true;
            PageIndex = Math.Min(PageCount, PageIndex + 1);
            DrawControl(true);
        }


        private void lnk_Last_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            lnk_First.Enabled = true;
            lnk_Prev.Enabled = true;
            lnk_Next.Enabled = false;
            lnk_Last.Enabled = false;
            PageIndex = PageCount;
            DrawControl(true);
        }


        /// <summary>
        /// 跳轉
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Go_Click(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtPage_Num.Text.Trim(), out num) && num > 0)
            {
                if (num <= pageCount)
                {
                    PageIndex = num;
                    DrawControl(true);
                }
            }
        }


        /// <summary>
        /// 跳轉頁數限制
        /// </summary>
        private void txtPage_Num_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            if (int.TryParse(txtPageNum.Text.Trim(), out num) && num > 0)
            {
                if (num > PageCount)
                {
                    txtPageNum.Text = PageCount.ToString();
                }
            }
        }
        /// <summary>
        /// 光標離開分頁屬性
        /// <summary>
        private void txtPage_Size_Leave(object sender, EventArgs e)
        {
            if (isTextChanged)
            {
                isTextChanged = false;
                lnk_First_LinkClicked(null, null);
            }
        }


        /// <summary>
        /// 分頁屬性改變了。
        /// </summary>
        private void txtPage_Size_TextChanged(object sender, EventArgs e)
        {
            int num = 0;
            if (!int.TryParse(txtPage_Size.Text.Trim(), out num) || num <= 0)
            {
                num = 10;
                txtPage_Size.Text = "10";
            }
            else
            {
                isTextChanged = true;
            }
            pageSize = num;
        }


        private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btn_Go_Click(null, null);
            }
        }


        ///// <summary>
        ///// enter鍵功能
        ///// </summary>
        //private void txtPage_Num_KeyPress(object sender, KeyPressEventArgs e)
        //{
        //    btn_Go_Click(null, null);
        //}


        //private void txtPage_Num_KeyDown(object sender, KeyEventArgs e)
        //{
        //    if (e.KeyCode == Keys.Enter)
        //    {
        //        btn_Go_Click(null, null);
        //    }
        //}


    }

2:分頁控件的使用

編譯後工具欄就會有這個分頁控件,然後把這個控件拖到窗口中就行,如圖


在load方法中加上pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);並實現pagerControl1_OnPageChanged方法

 public partial class StartForm : Form
    {
        public StartForm()
        {
            InitializeComponent();
        }


        private void StartForm_Load(object sender, EventArgs e)
        {
            pagerControl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
        }

        private void pagerControl1_OnPageChanged(object sender, EventArgs e)
        {


            dataGridView1.DataSource = null;
            //dataGridView1.Rows.Clear();
            List<LayerAttributeFieldsModel> pageShow_List = new List<LayerAttributeFieldsModel>();
            int pageindex = controlPage_QueryData1.PageIndex;
            int pageSize = controlPage_QueryData1.PageSize;
            int fromIndex = pageSize * (pageindex - 1);//開始行
            int toIndex = pageSize * pageindex - 1; //結束行
            if (toIndex >= list2.Count)//list2 爲查詢到的記錄
            {
                toIndex = list2.Count - 1;
            }
            for (int k = fromIndex; k <= toIndex; k++)
            {
                pageShow_List.Add(list2[k]);//要顯示的記錄
            }
            setDataGridView(pageShow_List);//把記錄寫入datagridview
            controlPage_QueryData1.DrawControl(list2.Count);
        }

//查詢
       private void button1_Click(object sender, EventArgs e)
        {

dataGridView1.DataSource = null;
                //dataGridView1.Rows.Clear();//清除記錄

//把查到的數據放到list或者dataset中

    if (list2.Count < 11)//查詢的記錄沒超過10條
                    {
                        controlPage_QueryData1.PageIndex = 1;
                    }
                    List<LayerAttributeFieldsModel> pageShowList = new List<LayerAttributeFieldsModel>();
                    int pageindex = controlPage_QueryData1.PageIndex;
                    int pageSize = controlPage_QueryData1.PageSize;
                    int fromIndex = pageSize * (pageindex - 1);//開始行
                    int toIndex = pageSize * pageindex - 1; //結束行
                    if (toIndex >= list2.Count)
                    {
                        toIndex = list2.Count - 1;
                    }
                    for (int k = fromIndex; k <= toIndex; k++)
                    {
                        pageShowList.Add(list2[k]);
                    }
                    setDataGridView(pageShowList);
                    controlPage_QueryData1.DrawControl(list2.Count);

}
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章