使用WCF实现服务器分页

来源:互联网 发布:扫描字的软件 编辑:程序博客网 时间:2024/05/17 05:14

WCF端

using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Collections.Generic;

namespace SilverlightApplication1.Web.WCF
{

    public partial class Service1
    {
        /// <summary>
        ///
        /// </summary>
        /// <param name="tatolCount">总条数</param>
        /// <param name="pageIndex">获取数据的页码</param>
        /// <param name="pageSize">每页大小</param>
        /// <returns></returns>
        [OperationContract]
        public List<UserInfo> getUserList(out int totalCount, int pageIndex, int pageSize)
        {
            using (SLtestEntities entities = new SLtestEntities())
            {
                totalCount = entities.UserInfo.Count();
                return entities.UserInfo.OrderByDescending(c => c.id).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
            }
        }
    }
}

 

客户端

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 SilverlightApplication1.ServiceReference1;
using System.Windows.Data;

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        int pageSize = 3;//每页大小
        int pageIndex = 1;//当前页数
        bool 是否要调用分页方法 = true;
        public MainPage()
        {
            InitializeComponent();
            getUserList();
        }

        /// <summary>
        /// 从服务器获取分页数据
        /// </summary>
        private void getUserList()
        {
            Service1Client client = new Service1Client();
            client.getUserListCompleted += new EventHandler<getUserListCompletedEventArgs>(client_getUserListCompleted);
            client.getUserListAsync(pageIndex, pageSize);
            client.CloseAsync();
        }

        void client_getUserListCompleted(object sender, getUserListCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                是否要调用分页方法 = false;
                RefreshDataPager(e.tatolCount, dataPager1, pageSize, pageIndex);
                dataGrid1.ItemsSource = e.Result;
                是否要调用分页方法 = true;
            }
        }

        /// <summary>
        /// 刷新分页控件的值
        /// </summary>
        /// <param name="TatolCount">总条数</param>
        /// <param name="dataPager">要刷新的分页控件</param>
        /// <param name="pageSize">每页大小</param>
        /// <param name="pageIndex">当前页数</param>
        public void RefreshDataPager(int TatolCount, DataPager dataPager, int pageSize, int pageIndex)
        {

            List<int> NumList = new List<int>();
            for (int i = 0; i < TatolCount; i++) NumList.Add(i);
            PagedCollectionView pcv = new PagedCollectionView(NumList);
            dataPager.Source = pcv;
            dataPager.PageSize = pageSize;//设置分页控件的每页大小


            //设置翻页控件的显示页码。
            if (dataPager.PageCount >= pageIndex)//如果总页数大于当前页数
            {
                dataPager.PageIndex = pageIndex - 1;//设置当前显示的页码,因为dataPager.PageIndex的设置页数是重0开始的所以要减1
            }
            else//如果
            {
                pageIndex = dataPager.PageCount;
                dataPager.PageIndex = pageIndex - 1;
            }

        }

        private void dataPager1_PageIndexChanged(object sender, EventArgs e)
        {
            if (是否要调用分页方法 == true)
            {
                pageIndex = ((DataPager)sender).PageIndex + 1;
                getUserList();//获取用户总条数
            }
        }
    }
}

XAML端

<UserControl x:Class="SilverlightApplication1.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"
       xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    d:DesignHeight="591" d:DesignWidth="544">

    <Grid x:Name="LayoutRoot" Background="White" Height="394" Width="466">
        <sdk:DataGrid AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="412" >
            <sdk:DataGrid.Columns>
                <sdk:DataGridTemplateColumn Header="名字"   SortMemberPath="user_name"  CanUserSort="True" CanUserResize="True" CanUserReorder="True">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel  Margin="5,0,5,0">
                                <TextBlock Text="{Binding user_name}">
                                </TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
                <sdk:DataGridTemplateColumn Header="密码"   SortMemberPath="password"  CanUserSort="True" CanUserResize="True" CanUserReorder="True">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel  Margin="5,0,5,0">
                                <TextBlock Text="{Binding password}">
                                </TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>

                <sdk:DataGridTemplateColumn >
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <!--<Button x:Name="btnEdit"  Content="编辑"  Click="btnEdit_Click"     />-->
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>


        </sdk:DataGrid>
        <sdk:DataPager Height="26" HorizontalAlignment="Left" Margin="188,262,0,0" Name="dataPager1" PageSize="10" VerticalAlignment="Top" Width="200"  PageIndexChanged="dataPager1_PageIndexChanged"  />
      
    </Grid>
</UserControl>

 

原创粉丝点击