WPF表格分页

先查询数据源,再分页:

先写一个控件:

WPF表格分页_第1张图片

控件C#:

 public partial class Pager : UserControl
    {

        public Pager()
        {
            InitializeComponent();

            prePageBtn.IsEnabled = false;
        }

        private DataTable _dt = new DataTable();
        //每页显示多少条
        private int pageNum = 25;
        //当前是第几页
        private int pIndex = 1;
        //对象
        private DataGrid grdList;
        //最大页数
        private int MaxIndex = 1;
        //一共多少条
        private int allNum = 0;

        #region 初始化数据
        /// 
        /// 初始化数据
        /// 
        /// 
        /// 
        /// 
        public void ShowPages(DataGrid grd, DataTable dt)
        {
            if (dt == null || dt.Rows.Count == 0)
            {
                Visibility = Visibility.Hidden;
                return;
            }
            _dt = dt.Clone();

            grdList = grd;
            pIndex = 1;
            foreach (DataRow r in dt.Rows)
                _dt.ImportRow(r);
            SetMaxIndex();
            ReadDataTable();
        }
        #endregion

        #region 画数据
        /// 
        /// 画数据
        /// 
        private void ReadDataTable()
        {
            try
            {
                pageNoTbk.Text = pIndex.ToString();
                pageCountTbk.Text = MaxIndex.ToString();
                
                DataTable tmpTable = new DataTable();
                tmpTable = _dt.Clone();
                int first = pageNum * (pIndex - 1);
                first = (first > 0) ? first : 0;
                //如何总数量大于每页显示数量
                if (_dt.Rows.Count >= pageNum * pIndex)
                {
                    for (int i = first; i < pageNum * pIndex; i++)
                        tmpTable.ImportRow(_dt.Rows[i]);
                }
                else
                {
                    for (int i = first; i <_dt.Rows.Count; i++)
                        tmpTable.ImportRow(_dt.Rows[i]);
                }
                grdList.ItemsSource = tmpTable.DefaultView;
                currentCountTbk.Text = grdList.Items.Count.ToString();
                totalCountTbk.Text = _dt.Rows.Count.ToString();
                tmpTable.Dispose();
            }
            catch
            {
                MessageBox.Show("错误");
            }
            finally
            {
                DisplayPagingInfo();
            }

        }
        #endregion

        #region 每页显示等数据
        /// 
        /// 每页显示等数据
        /// 
        private void DisplayPagingInfo()
        {
            if (MaxIndex == 1)
            {
                firstPageBtn.IsEnabled = false;
                prePageBtn.IsEnabled = false;
                nextPageBtn.IsEnabled = false;
                lastPageBtn.IsEnabled = false;
            }
            else
            {
                if (pIndex == 1)
                {
                    firstPageBtn.IsEnabled = false;
                    prePageBtn.IsEnabled = false;
                    nextPageBtn.IsEnabled = true;
                    lastPageBtn.IsEnabled = true;
                }
                else if (pIndex==MaxIndex)
                {
                    firstPageBtn.IsEnabled = true;
                    prePageBtn.IsEnabled = true;
                    nextPageBtn.IsEnabled = false;
                    lastPageBtn.IsEnabled = false;
                }
                else
                {
                    firstPageBtn.IsEnabled = true;
                    prePageBtn.IsEnabled = true;
                    nextPageBtn.IsEnabled = true;
                    nextPageBtn.IsEnabled = true;
                }
            }
        }
        #endregion


        #region 设置最多大页面
        /// 
        /// 设置最多大页面
        /// 
        private void SetMaxIndex()
        {
            //多少页
            int Pages = _dt.Rows.Count / pageNum;
            if (_dt.Rows.Count != (Pages * pageNum))
            {
                if (_dt.Rows.Count < (Pages * pageNum))
                    Pages--;
                else
                    Pages++;
            }
            MaxIndex = Pages;
            allNum = _dt.Rows.Count;
        }
        #endregion

        private void Tbl_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            TextBlock tbl = sender as TextBlock;
            if (tbl == null)
                return;
            int index = int.Parse(tbl.Text.ToString());
            pIndex = index;
            if (index > MaxIndex)
                pIndex = MaxIndex;
            if (index < 1)
                pIndex = 1;
            ReadDataTable();
        }

        private void FirstPageBtn_Click(object sender, RoutedEventArgs e)
        {
            pIndex = 1;
            ReadDataTable();
        }

        private void PrePageBtn_Click(object sender, RoutedEventArgs e)
        {
            if (pIndex <= 1)
                return;
            pIndex--;
            ReadDataTable();
        }

        private void NextPageBtn_Click(object sender, RoutedEventArgs e)
        {
            if (pIndex >= MaxIndex)
                return;
            pIndex++;
            ReadDataTable();
        }

        private void LastPageBtn_Click(object sender, RoutedEventArgs e)
        {
            pIndex = MaxIndex;
            ReadDataTable();
        }

        private void GotoBtn_Click(object sender, RoutedEventArgs e)
        {
            if (gotoPageNoTb.Text == "")
                return;
            if (Convert.ToInt32(gotoPageNoTb.Text) == pIndex|| Convert.ToInt32(gotoPageNoTb.Text)>MaxIndex|| Convert.ToInt32(gotoPageNoTb.Text)<=0)
                return;
            pIndex = Convert.ToInt32(gotoPageNoTb.Text);
            ReadDataTable();
        }
    }

 引用控件的XAML:

  xmlns:app="clr-namespace:命名空间

 

 

你可能感兴趣的:(C#,WPF)