WPF MVVM 用户控件完成分页

项目中经常会有分页查询的情况,在WPF中我们可以通过用户控件完成分页

一下为分页控件的页面代码,

<UserControl x:Class="Foundation.UCtrl.NextPageControl"
             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="56" d:DesignWidth="642">
    <UserControl.Resources>
        <Style x:Key="PageButton" TargetType="Button">
            <Style.Triggers>
                <EventTrigger RoutedEvent="Button.MouseEnter">
                    <BeginStoryboard>
                        <Storyboard >
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:00.5000000" BeginTime="0"/>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:00.5000000" BeginTime="0" />
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="Button.MouseLeave">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="1" Duration="00:00:00.5000000" BeginTime="0"/>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="1" Duration="00:00:00.5000000" BeginTime="0"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleX" To="0.8" Duration="00:00:00.2000000" BeginTime="0" AutoReverse="True"/>
                            <DoubleAnimation Storyboard.TargetProperty="RenderTransform.ScaleY" To="0.8" Duration="00:00:00.2000000" BeginTime="0" AutoReverse="True"/>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </UserControl.Resources>
    <Grid Height="50" Width="637">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="232*"/>
            <ColumnDefinition Width="58*"/>
            <ColumnDefinition Width="58*"/>
            <ColumnDefinition Width="58*"/>
            <ColumnDefinition Width="58*"/>
            <ColumnDefinition Width="78*"/>
        </Grid.ColumnDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Column="0">
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content="共"/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0" Content="{Binding Path=TotalPage,Mode=TwoWay}" Name="lblTotalPage" />
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content="页"/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content="当前第"/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Name="lblCurrentPage" Content="{Binding Path=CurrentPage,Mode=TwoWay}" />
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content="页"/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content="每页 "/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Name="lblPageSize" Content="{Binding Path=PageSize,Mode=TwoWay}"/>
            <Label FontSize="14" Margin="0 7 0 0" Foreground="#FF3575A0"  Content=" 条"/>
        </StackPanel>
        <Button Width="48" Height="48"   Style="{StaticResource PageButton}"  Grid.Column="1" BorderThickness="0" Name="btnFrist" Click="btnFrist_Click" Cursor="Hand">
            <Button.RenderTransform>
                <ScaleTransform CenterX="24" CenterY="24" ScaleX="1" ScaleY="1"/>
            </Button.RenderTransform>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="/Images\NextPage\button_begin.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>
        <Button Width="48" Height="48"  Style="{StaticResource PageButton}" Grid.Column="2" BorderThickness="0" Name="btnRew" Click="btnRew_Click"  Cursor="Hand">
            <Button.RenderTransform>
                <ScaleTransform CenterX="24" CenterY="24" ScaleX="1" ScaleY="1"/>
            </Button.RenderTransform>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="/Images\NextPage\button_rew.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>
        <Button Width="48" Height="48"  Style="{StaticResource PageButton}" Grid.Column="3" BorderThickness="0" Name="btnFF" Click="btnFF_Click" Cursor="Hand">
            <Button.RenderTransform>
                <ScaleTransform CenterX="24" CenterY="24" ScaleX="1" ScaleY="1"/>
            </Button.RenderTransform>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="/Images\NextPage\button_ff.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>
        <Button Width="48" Height="48"  Style="{StaticResource PageButton}" Grid.Column="4" BorderThickness="0" Name="btnLast" Click="btnLast_Click" Cursor="Hand">
            <Button.RenderTransform>
                <ScaleTransform CenterX="24" CenterY="24" ScaleX="1" ScaleY="1"/>
            </Button.RenderTransform>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="/Images\NextPage\button_end.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>
        <Button Width="48" Height="48"  Style="{StaticResource PageButton}" Grid.Column="6" BorderThickness="0" Name="btnRefresh" Click="btnRefresh_Click" Cursor="Hand">
            <Button.RenderTransform>
                <ScaleTransform CenterX="24" CenterY="24" ScaleX="1" ScaleY="1"/>
            </Button.RenderTransform>
            <Button.Template>
                <ControlTemplate>
                    <Image Source="/Images\NextPage\button_rotate_ccw.png"/>
                </ControlTemplate>
            </Button.Template>
        </Button>
    </Grid>
</UserControl>
NextPageControl的后台代码
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 using System.Windows;
  7 using System.Windows.Controls;
  8 using System.Windows.Data;
  9 using System.Windows.Documents;
 10 using System.Windows.Input;
 11 using System.Windows.Media;
 12 using System.Windows.Media.Imaging;
 13 using System.Windows.Navigation;
 14 using System.Windows.Shapes;
 15
 16 namespace TestNextPage
 17 {
 18     /// <summary>
 19     /// NextPageControl.xaml 的交互逻辑
 20     /// </summary>
 21     public partial class NextPageControl : UserControl
 22     {
 23         //定义一个委托
 24         public delegate void PageChangedHandle(object sender, EventArgs e);
 25         //定义一个事件
 26         public event PageChangedHandle PageChanged;
 27
 28         public NextPageControl()
 29         {
 30             InitializeComponent();
 31
 32         }
 33         //总页数
 34         private int totalPage = 1;
 35         /// <summary>
 36         /// 当前页
 37         /// </summary>
 38         private int currentPage = 1;
 39
 40         #region 每页显示的条数
 41         /// <summary>
 42         /// 注册当前页
 43         /// </summary>
 44         public static readonly DependencyProperty PageSizeProperty = DependencyProperty.Register("PageSize", typeof(String),
 45         typeof(NextPageControl), new FrameworkPropertyMetadata("1", FrameworkPropertyMetadataOptions.AffectsMeasure), new ValidateValueCallback(CurrentPageValidation));
 46
 47         /// <summary>
 48         /// 验证当前页
 49         /// </summary>
 50         /// <param name="value"></param>
 51         /// <returns></returns>
 52         public static bool PageSizeValidation(object value)
 53         {
 54             return true;
 55         }
 56         /// <summary>
 57         /// 当前页
 58         /// </summary>
 59         public string PageSize
 60         {
 61             get { return GetValue(NextPageControl.PageSizeProperty).ToString(); }
 62             set
 63             {
 64                 SetValue(NextPageControl.PageSizeProperty, value);
 65                 lblPageSize.Content = value;
 66             }
 67         }
 68         #endregion
 69
 70         #region 当前页
 71         /// <summary>
 72         /// 注册当前页
 73         /// </summary>
 74         public static readonly DependencyProperty CurrentPageProperty = DependencyProperty.Register("CurrentPage", typeof(String),
 75         typeof(NextPageControl), new FrameworkPropertyMetadata("1", FrameworkPropertyMetadataOptions.AffectsMeasure, new PropertyChangedCallback(OnCurrentPageChanged)), new ValidateValueCallback(CurrentPageValidation));
 76
 77         /// <summary>
 78         /// 验证当前页
 79         /// </summary>
 80         /// <param name="value"></param>
 81         /// <returns></returns>
 82         public static bool CurrentPageValidation(object value)
 83         {
 84             return true;
 85         }
 86         /// <summary>
 87         /// 当前页
 88         /// </summary>
 89         public string CurrentPage
 90         {
 91             get { return GetValue(NextPageControl.CurrentPageProperty).ToString(); }
 92             set
 93             {
 94                 SetValue(NextPageControl.CurrentPageProperty, value);
 95
 96                 lblCurrentPage.Content = value;
 97             }
 98         }
 99
100
101         #endregion
102
103         #region 总页数
104         /// <summary>
105         /// 总页数
106         /// </summary>
107         public static readonly DependencyProperty TotalPageProperty = DependencyProperty.Register("TotalPage", typeof(String), typeof(NextPageControl), new FrameworkPropertyMetadata("1", FrameworkPropertyMetadataOptions.AffectsMeasure, new PropertyChangedCallback(OnTotalPageChanged)), new ValidateValueCallback(TotalPageValidation));
108
109         /// <summary>
110         /// 总页数进行验证
111         /// </summary>
112         /// <param name="value"></param>
113         /// <returns></returns>
114         public static bool TotalPageValidation(object value)
115         {
116             return true;
117         }
118         /// <summary>
119         /// 总页数
120         /// </summary>
121         public string TotalPage
122         {
123             get { return GetValue(NextPageControl.TotalPageProperty).ToString(); }
124             set
125             {
126                 SetValue(NextPageControl.TotalPageProperty, value);
127
128             }
129         }
130
131         #endregion
132
133         #region 私有方法
134         /// <summary>
135         /// 值改变方法将由此方法来引发事件
136         /// </summary>
137         private void PageChangedFunc()
138         {
139             if (PageChanged != null)
140             {
141                 ///引发事件
142                 PageChanged(this, new EventArgs());
143             }
144         }
145
146
147         #endregion
148
149         /// <summary>
150         /// 首页
151         /// </summary>
152         /// <param name="sender"></param>
153         /// <param name="e"></param>
154         private void btnFrist_Click(object sender, RoutedEventArgs e)
155         {
156             CurrentPage = "1";
157             PageChangedFunc();
158
159         }
160         /// <summary>
161         /// 前一页
162         /// </summary>
163         /// <param name="sender"></param>
164         /// <param name="e"></param>
165         private void btnRew_Click(object sender, RoutedEventArgs e)
166         {
167             totalPage = GetIntVal(TotalPage);
168             currentPage = GetIntVal(CurrentPage);
169             if (currentPage > 1)
170             {
171                 currentPage = currentPage - 1;
172                 CurrentPage = currentPage.ToString();
173             }
174             PageChangedFunc();
175         }
176         /// <summary>
177         /// 后一页
178         /// </summary>
179         /// <param name="sender"></param>
180         /// <param name="e"></param>
181         private void btnFF_Click(object sender, RoutedEventArgs e)
182         {
183             currentPage = GetIntVal(CurrentPage);
184             totalPage = GetIntVal(TotalPage);
185             if (currentPage < totalPage)
186             {
187                 currentPage = currentPage + 1;
188                 CurrentPage = currentPage.ToString();
189             }
190             PageChangedFunc();
191         }
192         //尾页
193         private void btnLast_Click(object sender, RoutedEventArgs e)
194         {
195             currentPage = GetIntVal(TotalPage);
196             CurrentPage = currentPage.ToString();
197             PageChangedFunc();
198         }
199
200         /// <summary>
201         /// 刷新当前页
202         /// </summary>
203         /// <param name="sender"></param>
204         /// <param name="e"></param>
205         private void btnRefresh_Click(object sender, RoutedEventArgs e)
206         {
207             PageChangedFunc();
208         }
209
210         private int GetIntVal(string val)
211         {
212             int temp = 0;
213             if (!int
214                 .TryParse(val, out temp))
215             {
216                 temp = 1;
217             }
218             return temp;
219         }
220         /// <summary>
221         /// 当当前页值改变
222         /// </summary>
223         /// <param name="sender"></param>
224         /// <param name="e"></param>
225         private static void OnTotalPageChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
226         {
227
228             //MyButton hsb = (MyButton)sender;
229             //  SetValue(NextPageControl.CurrentPageProperty, "1");
230            // SetFunc();
231             //Image image = hsb.tehImage;
232             //CurrentPage = "1";
233             //image.Source = new BitmapImage((Uri)e.NewValue);
234         }
235         /// <summary>
236         /// 当当前页值改变
237         /// </summary>
238         /// <param name="sender"></param>
239         /// <param name="e"></param>
240         private static void OnCurrentPageChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
241         {
242
243             //MyButton hsb = (MyButton)sender;
244             //  SetValue(NextPageControl.CurrentPageProperty, "1");
245             // ShowMsg("event");
246             //Image image = hsb.tehImage;
247             //CurrentPage = "1";
248             //image.Source = new BitmapImage((Uri)e.NewValue);
249         }
250
251     }
252 }

在完成分页控件以后

定义View,注意View中需要添加System.Windows.Interactivity 这个Dll

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

需要通过它来转换事件toCommand

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:TestNextPage" x:Class="TestNextPage.MainWindow"
        Title="MainWindow" Height="350" Width="700">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="30"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="45"></RowDefinition>
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" Grid.Row="0">
            <Button Content="查询" Command="{Binding Path=QueryCommand}"/>
        </StackPanel>
        <DataGrid Grid.Row="1"
                  HeadersVisibility="Column" VerticalGridLinesBrush="WhiteSmoke"
                  AutoGenerateColumns="False" CanUserAddRows="False" SelectionUnit="FullRow"
                  ItemsSource="{Binding Path=ArchiveModels,Mode=TwoWay}"   >
            <DataGrid.Columns>
                <DataGridTextColumn Header="文件编号" Width="130" IsReadOnly="True"  Binding="{Binding Path=Id}"/>
                <DataGridTextColumn Header="文件名称" Width="130" IsReadOnly="True" Binding="{Binding Path=ArchiveName}" />
            </DataGrid.Columns>
        </DataGrid>
        <local:NextPageControl Grid.Row="2" x:Name="nextPageControl1"  TotalPage="{Binding Path=TotalPage,Mode=TwoWay}" PageSize="{Binding Path=PageSize,Mode=TwoWay}" CurrentPage="{Binding Path=CurrentPage,Mode=TwoWay}">
                <i:Interaction.Triggers>
                    <i:EventTrigger  EventName="PageChanged">
                        <i:InvokeCommandAction  Command="{Binding Path=NextPageSearchCommand, Mode=TwoWay}" />
                    </i:EventTrigger>
                </i:Interaction.Triggers>
        </local:NextPageControl>
    </Grid>

</Window>

后台

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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 TestNextPage
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            var vm = new MainWindowViewModel();
            DataContext = vm;
        }
    }
}

ViewModel代码

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GalaSoft.MvvmLight.CommandWpf;

namespace TestNextPage
{
    public class MainWindowViewModel : BaseViewModel
    {
        public MainWindowViewModel()
        {
            InitTestData();
        }

        private ObservableCollection<ArchiveModel> _archiveModels;
        public ObservableCollection<ArchiveModel> ArchiveModels
        {
            get { return _archiveModels; }
            set
            {
                _archiveModels = value;
                RaisePropertyChanged();
            }

        }
        public RelayCommand QueryCommand { get; set; }

        private async void QueryCommandFunc()
        {
            await Task.Run(() =>
                {
                    int totalCount = 0;
                    ArchiveModels = GetData(PageSize, out totalCount);
                    if (totalCount % PageSize == 0)
                    {
                        TotalPage = (totalCount / PageSize).ToString();
                    }
                    else
                    {
                        TotalPage = ((totalCount / PageSize) + 1).ToString();
                    }

                });
        }

        #region 分页相关属性

        /// <summary>
        /// 分页查询命令
        /// </summary>
        private async void NextPageSearchCommandFunc()
        {
            await Task.Run(() =>
            {
                var pageIndex = Convert.ToInt32(CurrentPage);
                ArchiveModels = QueryData(pageIndex, PageSize);
            });
        }
        private string _totalPage = string.Empty;
        /// <summary>
        /// 总页数
        /// </summary>
        public string TotalPage
        {
            get { return _totalPage; }
            set
            {
                _totalPage = value;
                RaisePropertyChanged();
            }
        }

        private string _currentPage = "1";
        /// <summary>
        /// 当前页
        /// </summary>
        public string CurrentPage
        {
            get { return _currentPage; }
            set
            {
                _currentPage = value;
                RaisePropertyChanged();
            }
        }

        private int _pageSize = 40;
        /// <summary>
        /// 每页显示的记录数
        /// </summary>
        public int PageSize
        {
            get { return _pageSize; }
            set
            {
                _pageSize = value;
                RaisePropertyChanged();
            }
        }
        private int _pageIndex;
        private int _totalCount;
        public int PageIndex
        {
            get { return _pageIndex; }
            set
            {
                _pageIndex = value;

                RaisePropertyChanged();
            }
        }

        public int TotalCount
        {
            get { return _totalCount; }
            set
            {
                _totalCount = value;

                RaisePropertyChanged();
            }
        }
        /// <summary>
        /// 分页管理
        /// </summary>
        public RelayCommand NextPageSearchCommand { get; set; }

        #endregion

        private ObservableCollection<ArchiveModel> GetData(int pageSize, out int totalCount)
        {
            totalCount = 10000;
            var data = new ObservableCollection<ArchiveModel>();
            for (int i = 0; i < pageSize; i++)
            {
                data.Add(new ArchiveModel() { Id = i + 1, ArchiveName = string.Format("ArchiveName{0}", i) });
            }
            return data;
        }

        private ObservableCollection<ArchiveModel> QueryData(int pageIndex, int pageSize)
        {
            var data = new ObservableCollection<ArchiveModel>();
            for (int i = 0; i < pageSize; i++)
            {
                data.Add(new ArchiveModel() { Id = (pageIndex - 1) * pageSize + i, ArchiveName = string.Format("ArchiveName{0}", i) });
            }
            return data;
        }

        private void InitTestData()
        {
            QueryCommand = new RelayCommand(QueryCommandFunc);
            NextPageSearchCommand = new RelayCommand(NextPageSearchCommandFunc);

        }
    }
}

那么附件就是这个分页示例吧

http://files.cnblogs.com/files/koujian/TestNextPage.rar

时间: 2024-08-25 12:24:33

WPF MVVM 用户控件完成分页的相关文章

wpf创建用户控件(计时器控件)

在vs中新增用户控件 前台xaml如下代码: <UserControl x:Class="Zh.SelfServiceEquipment.UI.ZhControls.CountDownTimeControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&qu

WPF 快捷键 用户控件 绑定无反应原因

在网上看了很多WPF绑定快捷键的例子,在Window里可以实现,但是一改成UserControl完全没反应. 经过一上午反复试验,窝草,是因为UserControl没获得焦点所以没反应,正解是 public MainWindow() { InitializeComponent(); UserControl.Focusable = true;     //可接受焦点,必须先设这个属性   UserControl.Focus();  //尝试获得焦点 }

WPF 用户控件嵌入网页

WPF使用用户控件嵌入网页,直接使用WebBrowser或Frame会产生报错,报错信息如下: 1.使用WebBrowser,<WebBrowser Source="http://192.168.1.72:8080/zjzx/logoutUserInfo.action"/>,启动登录系统后直接报错,切换到该对应模块也会报错. 2.使用Frame,<Frame Source="http://192.168.1.72:8080/zjzx/logoutUserIn

WPF用户控件实现类似WinForm的子窗口

1.WPF 介绍 .NET Framework 4 WPF 是下一代显示系统,用于生成Windows 客户端应用程序. 使用 WPF可以创建广泛的独立应用程序以及浏览器承载的应用程序. WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势.WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括Extensible Application Markup Language (XAML).控件.数据绑定.布局.2-D和3-D图形.动画.样式.模板.文档.媒体.文本

.NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐)

微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. .NET CORE(C#) WPF 方便的实现用户控件切换(祝大家新年快乐) 快到2020年了,祝大家新年快乐,今年2019最后一更,谢谢大家支持! 阅读导航 本文背景 代码实现 本文参考 源码 1. 本文背景 一个系统主界面,放上一个菜单,点击菜单在客户区切换不同的展示界面,这是很常规的设计,见下面展示效果图: 左侧一个菜单,点击菜单,右侧切换界面,界面切换动画使用MD控件的组件实现(自己

WPF学习- AllowDrop 用户控件启用拖放功能

知识点: 创建自定义用户控件(UserControl) 使用户控件成为拖动源 使用户控件成为放置目标 使面板能够接收从用户控件放置的数据 创建项目: 1.新建WPF项目(Wpf-AllowDrop) 2.在MainWindow.xaml的 Grid控件添加源码 <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Sta

WPF自定义控件(五)の用户控件(完结)

用户控件,WPF中是继承自UserControl的控件,我们可以在里面融合我们的业务逻辑. 示例:(一个厌恶选择的用户控件) 后端: using iMicClassBase; using iMicClassBase.BaseControl; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.W

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