Devexpress for WPF Grid分页

Devexpress for WPF中没有找到分页控件,列表数据太多,不分页肯定是不行的,所以就写了一个。

 

感觉还不错。这里跟大家分享一下

思路说明:首先创建自定义控件,控制好分页效果等。核心的位置便是分页信息与Grid的交互,这里使用事件委托完成。

分页控件做成这个效果,比较粗糙,后面有时间在更新一下。

界面代码就不上传了。

后台代码给大家看看:

 public DataPager()
        {
            InitializeComponent();
            cboPageSize.SelectionChanged += cboPageSize_SelectionChanged;
        }
        public delegate void BackToCallback(int start, int num, ref int count);
        public event BackToCallback OnPageGetList;

        public int pageIndex = 1;
        public int num = 100;
        public int PageCount = 1;
        public int count;

        void cboPageSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {

                ComboBoxItem cbb = cboPageSize.SelectedItem as ComboBoxItem;
                num = Convert.ToInt32(cbb.Content);
                int iEnd = count % num == 0 ? count / num : count / num + 1;
                pageIndex = Convert.ToInt32(txtJumpPage.Text);
                if (pageIndex > iEnd)
                {
                    pageIndex = iEnd;
                }

                DgvListBind(pageIndex, num, ref  count);
                ImgControl(pageIndex, count);

            }
            catch (Exception ex)
            {
            }
        }

        private void DgvListBind(int pageIndex, int num, ref int count)
        {
            if (OnPageGetList != null)
            {
                int start = (pageIndex - 1) * num;
                OnPageGetList(start, num, ref count);
                if (count == 0)
                {
                    lblPageCount.Content = "1";
                    lblTotal.Content = count.ToString();
                }
                else
                {
                    lblPageCount.Content = (count % num == 0 ? count / num : count / num + 1).ToString();
                    lblTotal.Content = count.ToString();
                }
            }
        }

        private void ImgControl(int pageIndex, int pageCount)
        {
            pageCount = pageCount / num == 0 ? pageCount / num : (pageCount / num) + 1;
            if (pageIndex <= 1 && pageCount <= 1)
            {
                btnFirst.IsEnabled = false;
                btnLeft.IsEnabled = false;
                btnRight.IsEnabled = false;
                btnLast.IsEnabled = false;
            }
            else if (pageIndex == 1 && pageCount > 1)
            {
                btnFirst.IsEnabled = false;
                btnLeft.IsEnabled = false;
                btnRight.IsEnabled = true;
                btnLast.IsEnabled = true;
            }
            else if (pageIndex > 1 && pageIndex < pageCount)
            {
                btnFirst.IsEnabled = true;
                btnLeft.IsEnabled = true;
                btnRight.IsEnabled = true;
                btnLast.IsEnabled = true;
            }
            else if (pageIndex > 1 && pageIndex == pageCount)
            {
                btnFirst.IsEnabled = true;
                btnLeft.IsEnabled = true;
                btnRight.IsEnabled = false;
                btnLast.IsEnabled = false;
            }
        }

        public void btnFirst_Click(object sender, RoutedEventArgs e)
        {
            pageIndex = 1;
            txtJumpPage.Text = "1";
            num = Convert.ToInt32(cboPageSize.Text);
            DgvListBind(pageIndex, num, ref  count);
            ImgControl(pageIndex, count);
        }

        private void btnLeft_Click(object sender, RoutedEventArgs e)
        {
            pageIndex -= 1;
            txtJumpPage.Text = pageIndex.ToString();
            num = Convert.ToInt32(cboPageSize.Text);
            DgvListBind(pageIndex, num, ref  count);
            ImgControl(pageIndex, count);
        }

        private void btnRight_Click(object sender, RoutedEventArgs e)
        {
            pageIndex += 1;
            txtJumpPage.Text = pageIndex.ToString();
            num = Convert.ToInt32(cboPageSize.Text);
            DgvListBind(pageIndex, num, ref  count);
            ImgControl(pageIndex, count);
        }

        private void btnLast_Click(object sender, RoutedEventArgs e)
        {
            num = Convert.ToInt32(cboPageSize.Text);
            pageIndex = count % num == 0 ? count / num : count / num + 1;
            DgvListBind(pageIndex, num, ref  count);
            //也许有新数据所以要更新
            pageIndex = count % num == 0 ? count / num : count / num + 1;
            txtJumpPage.Text = pageIndex.ToString();
            DgvListBind(pageIndex, num, ref  count);
            ImgControl(pageIndex, count);
        }

        private void btnJump_Click(object sender, RoutedEventArgs e)
        {
            int index = 0;
            try
            {
                index = Convert.ToInt32(txtJumpPage.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show("请输入数字!");
                return;
            }
            num = Convert.ToInt32(cboPageSize.Text);
            int end = count % num == 0 ? count / num : count / num + 1;
            if (index > end)
            {
                index = end;
                txtJumpPage.Text = end.ToString();
            }
            pageIndex = index;
            DgvListBind(pageIndex, num, ref  count);
            txtJumpPage.Text = pageIndex.ToString();
            DgvListBind(pageIndex, num, ref  count);
            ImgControl(pageIndex, count);
        }

        /// <summary>
        /// 刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            DgvListBind(pageIndex, num, ref  count);
        }

调用很简单,

在调用这个控件的地方,实现委托OnPageGetList就好了Demo代码下载

时间: 2024-10-11 02:19:57

Devexpress for WPF Grid分页的相关文章

DevExpress for WPF控件之TileLayoutControl

相信大家都很喜欢win8的菜单效果,但是自己做,实在比较困难. DevExpress for WPF 中有个控件 TileLayoutControl 感觉不错,先上效果图: 说说该菜单的常用属性: Header: 中文提示 Size:大小,一共4种:ExtraSmall,ExtraLarge,Small,Large dxlc:TileLayoutControl.GroupHeader:所属分组中文名称 dxlc:TileLayoutControl.IsFlowBreak:是否进入新的分组 dxw

WPF DataGrid分页功能实现代码 修改原作者不能实现的部分

这两天需要给Datagrid加个分页,查找了一些相关的文章,发现有一个写了一个控件比较好,地址是 http://blog.csdn.net/zdw_wym/article/details/8221894 感谢这位大神12年的帖子,但是照着做了以后,发现除了点击数字和GO按钮好使意外,神马“首页.上一页.下一页.末页”都不好使. 继续找寻相关的资料和查看大神的源码,发现有的地方写的不对,因为textblock没有click事件,而大神写了click事件,所以没有得到触发,介于这个问题,我稍作了修改

ExtJS4.2 Grid 分页栏 搜索

function SearchCondition(){ this.startTime = ""; this.endTime = ""; this.targetInfo = ""; this.logType = ""; this.manager = ""; this.reset = function(){ this.startTime = ""; this.endTime = "

dojo grid 分页

dojo很强大,也很方便,但是缺少文档,只能看源代码,也挺好的,就是费时间... 网上找了一段代码(找不到原出处了,不好意思),也看了dojo自带的demo,放一段可以执行的页面代码这里.把ip换成自己架设的js服务器(esi的CDN貌似有点问题)即可 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; ch

ext:grid分页,列宽度自动填满grid宽度

var cm = new Ext.grid.ColumnModel([{      header : '编号',      dataIndex : 'id'     }, {      header : '名称',      dataIndex : 'name'     }, {      header : '描述',      dataIndex : 'descn'     }]);   var store = new Ext.data.Store({      proxy : new Ext

ExtJs中grid分页加载的问题

最近项目中遇到一个grid分页加载的问题,当按照条件查询数据后,数据数据在grid中分页显示,当点击翻页后grid的中显示第二页数据.此时更换查询条件后再次点击查询时,发现grid的下面分页信息栏中页码并不是1,而是上次翻到的页面. 这是因为以前在点击查询时调用的是store.load()方法,然后再load之前将参数添加进去. 如果想让每次查询时页面从1开始就要使用store的loadPage方法.使用该方法指定每次加载的页码是1 例如 record_store.loadPage(1,{ pa

DevExpress 用户控件 分页(中)

说明: 1)具体调用请关注 看DevExpress 用户控件 分页(下) datanavi_ButtonClick 是DataNavigator的ButtonClikc事件 视图设计器: 分页用户控件后台代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using

DevExpress 用户控件 分页(上)

说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码:   [csharp] view plaincopyprint? //引用 using DevExpress.XtraEditors; //窗体继承 public partial class PageCtrl : DevExpress.XtraEditors.XtraUserControl (3)设置窗体属性 AutoScaleMo

DevExpress for WPF 使用换肤控件后在其他机器上无法运行问题

本人使用的DevExpress13.2.6的破解版.WPF的 在项目中使用了DevExpress的控件后在其他机器上无法运行,吓我一跳,然后我发现DLL都复制到本地了.这个是什么原因呢? 猜想是DLL引用了其他的DLL,或者是某些DLL需要注册.但是DLL那么多,并不知道是差哪些DLL,总不能全部弄过去吧,那么大.后来找了些资料问了下其他人用这个的问题,他们都说差DevExpress.Utils.v13.2.dll.但是实际上他们是winfrom的 和WPF不一样.根本不适合. 后来我一个个调试