• 使用Telerik的DataPager进行服务器端分页


    说是服务器端,因我是WPF程序,也就是客户端了。主要是DataPager默认是一次获取全部数据,然后只显示一部分数据,如果数据量比较大,性能会有一定的影响。

    我的主要做法是:根据查询得到的数据总量,生成一个List<int> 的列表复制给其Source属性。

    主要代码:

    1。前台代码

    <StackPanel>
                    <telerik:RadGridView ItemsSource="{Binding EmailList}" AutoGenerateColumns="False" CanUserInsertRows="False" CanUserDeleteRows="False" IsReadOnly="True" EnableColumnVirtualization="False" EnableRowVirtualization="False" IsFilteringAllowed="False" ShowGroupPanel="False" CanUserReorderColumns="False" CanUserSortColumns="False">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewDataColumn Header="账号" DataMemberBinding="{Binding UserName}"  Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
                            <telerik:GridViewDataColumn Header="密码" DataMemberBinding="{Binding Password}" Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
                        </telerik:RadGridView.Columns>
                    </telerik:RadGridView>
                    <telerik:RadDataPager x:Name="mailPager" Source="{Binding IndexList}" PageIndexChanged="mailPager_PageIndexChanged"  PageSize="20" DisplayMode="FirstLastPreviousNext, Text"/>
                </StackPanel>

    2。后台代码

    public NetsMail()
            {
                InitializeComponent();
    
                model = new NetsMailViewModel();
                this.DataContext = model;
            }
    
            private void mailPager_PageIndexChanged(object sender, Telerik.Windows.Controls.PageIndexChangedEventArgs e)
            {
                if (model != null)
                {
                    model.PageIndex = e.NewPageIndex;
                }
            }

    这里用到了DataGrid的PageIndexChanged事件

     PageIndexChanged="mailPager_PageIndexChanged" 

    主要的原因是我在使用PageIndex="{Binding PageIndex}"时,数据一直没有更显到ViewModel当中,不知道什么原因,只有采用这种方法,破坏了MVVM完好性。

    3。ViewModel
    public class NetsMailViewModel : NotificationObject
        {
            [Import(typeof(INetsDesktopContract))]
            public INetsDesktopContract NetsService { get; set; }
    
            public NetsMailViewModel()
            {
                NetsService = App.Container.GetExportedValue<INetsDesktopContract>();
    
                int count;
                EmailList = NetsService.GetEmailAccounts(0, 20, out count);
                IndexList = Enumerable.Range(0, count).ToList<int>();
            }
    
            private List<Email> emailList;
    
            public List<Email> EmailList
            {
                get { return emailList; }
                set { emailList = value; this.RaisePropertyChanged("EmailList"); }
            }
    
            private List<int> indexList;
    
            public List<int> IndexList
            {
                get { return indexList; }
                set { indexList = value;}
            }
    
            private int pageIndex;
    
            public int PageIndex
            {
                get { return pageIndex; }
                set 
                {
                    int count;
                    pageIndex = value;
                    EmailList = NetsService.GetEmailAccounts(value, 20, out count);
                }
            }       
        }
     
  • 相关阅读:
    捕获mssqlservice 修改表后的数据,统一存储到特定的表中,之后通过代码同步两个库的数据
    有关求第n位xxx 的算法的问题
    C#获取枚举的特性描述工具方法
    wpf中嵌入另一个子进程exe像本地的一个页面那样
    emit 实现动态类,动态实现接口
    EF 支持泛型动态加载类访问数据库
    C# 通过 参数返回 C++ 指针
    C# 接收C++ dll 可变长字节或者 字符指针 char*
    健身篇
    Ubuntu 16.04安装Docker-Compose 与 Can't connect to docker from docker-compose
  • 原文地址:https://www.cnblogs.com/Leman/p/3404450.html
Copyright © 2020-2023  润新知