c# 分页

来源:互联网 发布:金山软件官网 编辑:程序博客网 时间:2024/05/29 03:37

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);

}
    }


0 0