• silverlight 服务端分页


    silverlight 分页服务端分页就是在服务里面写分页的方法,silverlight 调用的时候传参数过来就行了。先看服务代码!

    我这边使用的是wcf服务!类图如下:

    服务写了两个方法,PageCount这个方法是获取数据总条数,PageFilter用于分页。该方法接受三个参数,PageSize、PageIndex、Filter,当然分页的前两个参数是必不可少的,其他的参数可以根据实际情况来定义;如果你要根据用户名来过滤的话,加个string UserName就行了;废话不多说。直接看该方法的代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    
    namespace Web
    {
        // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“WebPageService”。
        public class WebPageService : IWebPageService
        {
    
            public List<PageEntity> PageFilter(int? PageSize, int PageIndex, string filter)
            {
                List<PageEntity> sources = PageEntity.CreatePageSources();
                return sources.Skip((PageSize * (PageIndex - 1)).Value).Take(PageSize.Value).ToList();
            }
    
    
            public int PageCount(string filter)
            {
                return 6;
            }
        }
    
        public class PageEntity
        {
            public static List<PageEntity> CreatePageSources()
            {
                List<PageEntity> entitys = new List<PageEntity>();
                entitys.Add(new PageEntity()
                {
                    UserName="aa",
                    UserSex="男"
                });
                entitys.Add(new PageEntity()
                {
                    UserName = "aaa",
                    UserSex = "女"
                });
                entitys.Add(new PageEntity()
                {
                    UserName = "aaa1",
                    UserSex = "女"
                });
                entitys.Add(new PageEntity()
                {
                    UserName = "aaa2",
                    UserSex = "男"
                });
                entitys.Add(new PageEntity()
                {
                    UserName = "aaa3",
                    UserSex = "女"
                });
                entitys.Add(new PageEntity()
                {
                    UserName = "aaa4",
                    UserSex = "男"
                });
    
                return entitys;
            }
            
    
            public string UserName { get; set; }
    
            public string UserSex { get; set; }
    
            public int DataCount { get; set; }
    
    
        }
    }
    
    
    

     

    PageFilter方法很简单,就通过LInq分下页,你也可以通过其他方式分页,调用存储过程等!这个服务写好了。现在要做的就是silverlight 程序里面引用这个服务;

    现在来看silverlight页面的代码。

    View Code
    <UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"  x:Class="Silverlight.MainPage"
    xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d
    ="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
    ="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable
    ="d"
    d:DesignHeight
    ="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
    <sdk:DataGrid x:Name="dataGrid" Height="200"/>
    <sdk:DataPager x:Name="pager1" PageSize="2" PageIndexChanged="pager1_PageIndexChanged"></sdk:DataPager>
    </StackPanel>
    </Grid>
    </UserControl>
    
    

    这个页面就放了一个DataGrid和DataPager;简单说下这个分页控件,点击分页的时候他会触发PageIndexChanged事件,还有在设置分页控件的Source属性的时候他也会触发PageIndexChanged事件!

    我的做法就是当服务器返回的数据总数和分页控件的数据总数不一致的时候在从新设置分页控件的Source;贴代码!

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Silverlight.Test.PageService;
    using System.Windows.Data;

    namespace Silverlight
    {
    public partial class MainPage : UserControl
    {
    public MainPage()
    {
    InitializeComponent();
    Filter();
    }


    private void pager1_PageIndexChanged(object sender, EventArgs e)
    {

    Filter();
    }

    private void Filter()
    {

    WebPageServiceClient client = new WebPageServiceClient();
    client.PageCountCompleted += new EventHandler<PageCountCompletedEventArgs>(client_PageCountCompleted);
    client.PageCountAsync(string.Empty);
    }

    void client_PageCountCompleted(object sender, PageCountCompletedEventArgs e)
    {
    if (e.Result < 1)
    return;
    SetPageSource(e.Result);

    var pageIndex = pager1.PageIndex + 1;
    WebPageServiceClient client = sender as WebPageServiceClient;
    client.PageFilterCompleted += new EventHandler<PageFilterCompletedEventArgs>(client_PageFilterCompleted);
    client.PageFilterAsync(pager1.PageSize, pageIndex, string.Empty);
    }


    void client_PageFilterCompleted(object sender, PageFilterCompletedEventArgs e)
    {
    dataGrid.ItemsSource = e.Result;
    }

    private void SetPageSource(int resultCount)
    {
    if (pager1.Source != null && (pager1.Source as PagedCollectionView).TotalItemCount == resultCount)
    return;
    List<int> source = new List<int>();
    for (int i = 0; i < resultCount; i++)
    {
    source.Add(i);
    }

    PagedCollectionView pagedCollection = new PagedCollectionView(source);
    pager1.Source = pagedCollection;
    }
    }
    }
    
    

    服务端分页差不多完成!还有其他的方式大家拿出来分享下!

    代码下载

  • 相关阅读:
    window7访问虚拟机ubuntu中的mysql
    photo sphere viewer使用图像数据替代路径来生成全景图
    pgmagick,pil不保存图片并且获取图片二进制数据记录
    flask_admin model官方文档学习
    python pip更换下载源(转)
    flask admin学习记录
    mongodb权限管理(转)
    vmware三种网络连接模式区别
    使用VLC推送TS流(纯图版)
    【转】RTMP/RTP/RTSP/RTCP协议对比与区别介绍
  • 原文地址:https://www.cnblogs.com/heqinghua/p/2207358.html
Copyright © 2020-2023  润新知