Winform自定义分页控件


前言:其实,也用过一些第三方的分页控件;都是感觉很奇怪,要么就是界面不够美观大方,要么就是使用起来感觉很麻烦。想想觉得这玩意应该挺简单的啊,所以就决定还是写一个适合自己的吧。

一向简洁的我,终究只会造就一个简单的结果。所以注定这个控件足够简单。

bb66ff311e020470ee9851a17ee3e932.png

  1. 新建一个用户控件,在上面拖几个LabelTextBox控件,效果如下:8284d07c315bc71b9a6e68904add44c9.png

  2. 在代码页面分别定义以下属性

    public Action<int> GetPageData { get; set; }
    
    
            private Color _FontColor;
            [Browsable(true), Description("设置字体颜色")]
            public Color FontColor
            {
                get => _FontColor; set
                {
                    lb_down.ForeColor = lb_end.ForeColor = lb_go.ForeColor = lb_home.ForeColor = lb_page.ForeColor = lb_up.ForeColor = value;
                }
            }
    
    
            private int _DataCount;
            [Description("数据总数量")]
            public int DataCount
            {
                get => _DataCount;
                set
                {
                    _DataCount = value;
                    lb_page.Text = PageIndex + "/" + PageTotal;
                }
            }
    
    
            private int _PageSize;
            [Description("页显示数量")]
            public int PageSize
            {
                get
                {
                    return _PageSize <= 0 ? 50 : _PageSize;
                }
                set
                {
                    _PageSize = value;
                    lb_page.Text = PageIndex + "/" + PageTotal;
                }
            }
    
    
    
    
            private int _PageTotal;
            [Description("总页数")]
            public int PageTotal
            {
                get
                {
                    if (DataCount % PageSize == 0)
                    {
                        _PageTotal = DataCount / PageSize;
                    }
                    else
                    {
                        _PageTotal = DataCount / PageSize + 1;
                    }
                    return _PageTotal <= 0 ? 1 : _PageTotal;
                }
            }
    
    
            private int _PageIndex;
            [Description("当前页数")]
            public int PageIndex
            {
                get
                {
                    return _PageIndex <= 0 ? 1 : _PageIndex;
                }
                private set
                {
                    _PageIndex = value;
                    if (_PageIndex <= 0)
                    {
                        _PageIndex = 1;
                    }
                    if (_PageIndex > PageTotal)
                    {
                        _PageIndex = PageTotal;
                    }
                    if (GetPageData != null)
                    {
                        GetPageData(_PageIndex);
                        lb_page.Text = _PageIndex + "/" + PageTotal;
                    }
                }
            }
  1. 针对每个Label对应的属性做点击处理

    private void lb_home_Click(object sender, EventArgs e)
            {
                PageIndex = 1;
            }
    
    
            private void lb_up_Click(object sender, EventArgs e)
            {
                PageIndex--;
            }
    
    
            private void lb_down_Click(object sender, EventArgs e)
            {
                PageIndex++;
            }
    
    
            private void lb_end_Click(object sender, EventArgs e)
            {
                PageIndex = PageTotal;
            }
    
    
            private void lb_go_Click(object sender, EventArgs e)
            {
                if (int.TryParse(txt_num.Text, out int result))
                {
                    PageIndex = result;
                }
            }
    
    
            private void txt_num_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar == '\b' || (e.KeyChar >= '0' && e.KeyChar <= '9')))
                {
                    e.Handled = true;
                }
            }
  1. 好了,没了,控件结束了,简单吧。

  2. 再来看下使用方式,首先就是在获取到数据之后,把DataCount属性赋值数据的总数量

    private async Task GetPageData()
     {
         //...获取服务端数据的代码
         BindList.SetData(result.Data);
         pageEx1.DataCount = result.DataCount;
    }
  1. 然后就是做换页的处理了,也就是使用GetPageData获取到页码之后,重新进行数据获取即可

    pageEx1.GetPageData = async s =>
                {
                    PageIndex = s;
                    await GetPageData();
                };
  1. 控件简单,功能满足,使用方便。这不是理想中的控件么?

实现效果:

eb273947f768b553fbb2a3ffca18a588.gif

b7e5f9b3610262a6ec0bf3e3bcb67a39.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值