• WPF 分页控件


    刚接触WPF,直接给公司做第一个WPF进销存小项目,分页实用四个button实现的,做完后突然感觉自己太傻了。。。为什么不用自定义用户控件。。于是就写了个简单分页控件

    布局:

    <UserControl x:Class="Com.FMS.View.UserControls.ZsmPager"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="50" d:DesignWidth="480" Loaded="UserControl_Loaded">
        <Grid>
            <WrapPanel>
                <Button Name="btnFirstPage" Content="首页" Width="40" Margin="2" Click="btnFirstPage_Click"></Button>
                <Button Name="btnPageDown" Content="下一页" Width="50" Margin="2" Click="btnPageDown_Click"></Button>
                <Button Name="btnPageUp" Content="上一页" Width="50" Margin="2" Click="btnPageUp_Click"></Button>
                <Button Name="btnEndPage" Content="尾页" Width="40" Margin="2" Click="btnEndPage_Click"></Button>
                <TextBlock Name="txtPagerInfo" Text="当前第【{0}】页,共【{1}】页,共【{2}】条记录" Margin="5"></TextBlock>
            </WrapPanel>
        </Grid>
    </UserControl>

    交互逻辑代码中主要就定义了一个委托事件,在页码改变的时候可以激发该事件

    //***************************************************
    //
    // 文件名(FileName)  : ZsmPager.xaml.cs
    //
    // 作者(Author)      : zsm
    //
    // 创建时间(CreateAt):  2013-03-13 18:17:05
    //
    // 描述(Description) : 个人分页控件交互逻辑
    //
    //***************************************************
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    
    namespace Com.FMS.View.UserControls
    {
        /// <summary>
        /// 定义页码改变后激发的委托事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void PagerIndexChangedEventHandler(object sender, EventArgs e);
    
        /// <summary>
        /// ZsmPager.xaml 的交互逻辑
        /// </summary>
        public partial class ZsmPager : UserControl
        {
            #region 私有变量
            /// <summary>
            /// 当前页码
            /// </summary>
            private int _pageIndex = 1;
            /// <summary>
            /// 分页大小
            /// </summary>
            private int _pageSize = 15;
            /// <summary>
            /// 记录总数
            /// </summary>
            private int _totalCount = 0;
            /// <summary>
            /// 总页数
            /// </summary>
            private int _pageCount = 0;
            #endregion
    
            /// <summary>
            /// 构造
            /// </summary>
            public ZsmPager()
            {
                InitializeComponent();
            }
    
            #region 事件声明
            /// <summary>
            /// 页码改变后的事件
            /// </summary>
            public event PagerIndexChangedEventHandler PagerIndexChanged;
            #endregion
    
            #region 属性
            /// <summary>
            /// 当前页码
            /// </summary>
            public int PageIndex 
            {
                get { return _pageIndex; }
                set { _pageIndex = value; }
            }
    
            /// <summary>
            /// 分页大小
            /// </summary>
            public int PageSize
            {
                get { return _pageSize; }
                set { _pageSize = value; }
            }
    
            /// <summary>
            /// 记录总数
            /// </summary>
            public int TotalCount 
            {
                get { return _totalCount; }
                set 
                {
                    _totalCount = value;
                    //计算总页数
                    _pageCount = (int)Math.Ceiling((double)_totalCount / _pageSize);
                    SetPagerInfo(_pageIndex, _pageCount, _totalCount);
                }
            }
    
            /// <summary>
            /// 总页数
            /// </summary>
            public int PageCount 
            {
                get { return _pageCount; }
                set { _pageCount = value; }
            }
    
            #endregion
    
            #region 私有方法
            /// <summary>
            /// 设置分页按钮是否可用
            /// </summary>
            private void SetPageButtonEnabled()
            {
                //确定分页按钮的是否可用
                if (_pageCount <= 1)
                {
                    btnPageDown.IsEnabled = false;
                    btnPageUp.IsEnabled = false;
                    btnEndPage.IsEnabled = false;
                }
                else
                {
                    if (_pageIndex == _pageCount)
                    {
                        btnPageDown.IsEnabled = false;
                        btnPageUp.IsEnabled = true;
                        btnEndPage.IsEnabled = false;
                    }
                    else if (_pageIndex <= 1)
                    {
                        btnPageDown.IsEnabled = true;
                        btnPageUp.IsEnabled = false;
                        btnEndPage.IsEnabled = true;
                    }
                    else
                    {
                        btnPageDown.IsEnabled = true;
                        btnPageUp.IsEnabled = true;
                        btnEndPage.IsEnabled = true;
                    }
                }
            }
    
            /// <summary>
            /// 设置控件显示信息
            /// </summary>
            /// <param name="pageIndex">当前页码</param>
            /// <param name="pageCount">共有页数</param>
            /// <param name="totalCount">总记录条数</param>
            private void SetPagerInfo(int pageIndex, int pageCount, int totalCount)
            {
                txtPagerInfo.Text = String.Format("当前第【{0}】页,共【{1}】页,共【{2}】条记录", pageIndex, pageCount, totalCount);
            }
            #endregion
    
            #region 私有事件
            /// <summary>
            /// 控件加载事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void UserControl_Loaded(object sender, RoutedEventArgs e)
            {
                SetPageButtonEnabled();
            }   
    
            /// <summary>
            /// 首页按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnFirstPage_Click(object sender, RoutedEventArgs e)
            {
                _pageIndex = 1;
                SetPageButtonEnabled();
                PagerIndexChanged(sender, e);
            }
    
            /// <summary>
            /// 下一页按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnPageDown_Click(object sender, RoutedEventArgs e)
            {
                _pageIndex++;
                SetPageButtonEnabled();
                PagerIndexChanged(sender, e);
            }
    
            /// <summary>
            /// 上一页按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnPageUp_Click(object sender, RoutedEventArgs e)
            {
                _pageIndex--;
                SetPageButtonEnabled();
                PagerIndexChanged(sender, e);
            }
    
            /// <summary>
            /// 尾页按钮事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnEndPage_Click(object sender, RoutedEventArgs e)
            {
                _pageIndex = _pageCount;
                SetPageButtonEnabled();
                PagerIndexChanged(sender, e);
            }
            #endregion
        }
    }

    使用分页控件时的xaml

    <my:ZsmPager x:Name="pagerUser" PagerIndexChanged="pagerUser_PagerIndexChanged" />     

    <Window>中添加xmlns:my="clr-namespace:命名空间"

    在时实现控件PagerIndexChanged事件即可

    /// <summary>
            /// 页码改变时激发该事件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void pagerUser_PagerIndexChanged(object sender, EventArgs e)
            {
                //DataGrid数据绑定方法
                DgUserDataBind();
            }

    样式简单,不漂亮,一般分页可以用,界面:

  • 相关阅读:
    福大软工1816 · 第五次作业
    团队编程
    结队第一次作业
    词频统计 ——Java
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    2018软工实践第七次作业——需求报告分析
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    2018软工实践第六次作业——团队选题报告
  • 原文地址:https://www.cnblogs.com/zsmhhfy/p/2958865.html
Copyright © 2020-2023  润新知