WPF 分页控件

摘要:
做项目时,我需要分页数据。我在网站上搜索了很长时间,但仍然找不到合适的。我自己不会写。我急于先写这个项目,有时间我会重写它。页面部分代码˃背景代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem。Windows;usingSystems。Windows.Controls;using System。Windows.Data;using Systems。Windows.Documents;using System.Windows.Input;using System.Windows.Media;using system.Windows.Media.Imageing;using系统.Windows.导航;usingSystem.窗口。形状;namespaceT测试{publicdelegatevoidPagerIndexChangingEvent;/////Pager.xaml/////publicpartialclassPager:UserControl{publicPager(){InitializeComponent();}publiceventPagerIndexChangingEventPageIndexChanging;///////当前页面的索引////privateintpageIndex=0;publicintPageIndex{get{returnpageIndex;}设置{pageIndex=value;}}//////总页数///privateintpageCount///////页数///privateintpageSize=12;publicintPageSize{get{returnpageSize;}设置{pageSize=value;}}//数据私有计数的数量;publicintCount{get{returncount;}设置{count=value;ifpageCount=0;elsepageCount=count%pageSize==0?


注:此文原来写的,后来忘了什么原因删除了,在网上看到有人转载,我在转回来。

做项目时需要数据分页在网站找了半天也没有找到合适的,没办法自己写个,项目比较着急先凑合写个吧,有时间在重写下。

页面部分代码

<UserControl x:Class="Test.Pager"
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">

<StackPanel Orientation="Horizontal">

<Button Name="FirstButton" Content="首页" Margin="5" Foreground="White" Background="Black" Width="55" VerticalAlignment="Center" Click="FirstButton_Click"/>
<Button Name="PreButton" Content="上一页" Margin="5" Foreground="White" Background="Black" Width="55" VerticalAlignment="Center" Click="PreButton_Click"/>
<Button Name="NextButton" Content="下一页" Margin="5" Foreground="White" Background="Black" Width="55" VerticalAlignment="Center" Click="NextButton_Click"/>
<Button Name="LastButton" Content="尾页" Margin="5" Foreground="White" Background="Black" Width="55" VerticalAlignment="Center" Click="LastButton_Click"/>

<TextBlock VerticalAlignment="Center" FontSize="12" >
<TextBlock Text="【共"/>
<TextBlock Name="txtCount" Text="" Foreground="Red"/>
<TextBlock Text="页】"/>
<TextBlock Text="【当前第"/>
<TextBlock Name="txtCurrent" Foreground="Red"/>
<TextBlock Text="页】"/>
<TextBlock Text="【共"/>
<TextBlock Name="txtAll" Foreground="Red"/>
<TextBlock Text="条记录】"/>
</TextBlock>

</StackPanel>
</UserControl>


后台代码部分:

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 Test
{
public delegate void PagerIndexChangingEvent(int pageIndex, EventArgs e);

/// <summary>
/// Pager.xaml 的交互逻辑
/// </summary>
public partial class Pager : UserControl
{
public Pager()
{
InitializeComponent();
}

public event PagerIndexChangingEvent PageIndexChanging;

/// <summary>
/// 当前页索引
/// </summary>
private int pageIndex = 0;

public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
/// <summary>
/// 总页数
/// </summary>
private int pageCount;
/// <summary>
/// 一页个数
/// </summary>
private int pageSize=12;

public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
//数据个数
private int count;

public int Count
{
get { return count; }
set
{
count = value;
if (count == 0)
pageCount = 0;
else
pageCount = count % pageSize == 0 ? count / pageSize : count / pageSize + 1;
txtCount.Text = pageCount.ToString();
txtAll.Text = count.ToString();
Init(null);
}
}

void Init(EventArgs e)
{
try
{
InitButton();
int temp = pageIndex + 1;
if (pageCount == 0)
txtCurrent.Text = "0";
else
txtCurrent.Text = temp.ToString();
if (e != null)
{
PageIndexChanging(pageIndex, e);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

void InitButton()
{
this.FirstButton.IsEnabled = true;
this.PreButton.IsEnabled = true;
this.NextButton.IsEnabled = true;
this.LastButton.IsEnabled = true;
this.FirstButton.Background = Brushes.Black;
this.PreButton.Background = Brushes.Black;
this.NextButton.Background = Brushes.Black;
this.LastButton.Background = Brushes.Black;

//总共一页
if (pageCount < 2)
{
this.FirstButton.IsEnabled = false;
this.PreButton.IsEnabled = false;
this.NextButton.IsEnabled = false;
this.LastButton.IsEnabled = false;
this.FirstButton.Background = Brushes.Red;
this.PreButton.Background = Brushes.Red;
this.NextButton.Background = Brushes.Red;
this.LastButton.Background = Brushes.Red;
return;
}

//第一页
if (pageIndex == 0)
{
this.FirstButton.IsEnabled = false;
this.PreButton.IsEnabled = false;
this.FirstButton.Background = Brushes.Red;
this.PreButton.Background = Brushes.Red;
return;
}

//最后一页
if (pageIndex+1 == pageCount)
{
this.NextButton.IsEnabled = false;
this.LastButton.IsEnabled = false;
this.NextButton.Background = Brushes.Red;
this.LastButton.Background = Brushes.Red;
}
}


/// <summary>
/// 首页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FirstButton_Click(object sender, RoutedEventArgs e)
{
pageIndex = 0;
Init(e);
}

/// <summary>
/// 上一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void PreButton_Click(object sender, RoutedEventArgs e)
{
--pageIndex;
Init(e);
}

/// <summary>
/// 下一页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void NextButton_Click(object sender, RoutedEventArgs e)
{
++pageIndex;
Init(e);
}

/// <summary>
/// 尾页
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void LastButton_Click(object sender, RoutedEventArgs e)
{
pageIndex = pageCount - 1;
Init(e);
}
}
}


 效果图:

WPF 分页控件第1张

按钮增加了样式~

免责声明:文章转载自《WPF 分页控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HTTP2.0 原理详解MINA、Netty、Twisted一起学(十一):SSL/TLS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EasyUI中DataGrid隔行改变背景颜色。

<table id="dg" class="easyui-datagrid" style=" 1000px; height: 300px" data-options=" rownumbers:true, onClickRow:ClickRow,...

Vue中table表头合并的用法

<div class="panel-container"> <div> <table class="table-head"width="80%"> <thead> <tr> &l...

[原]零基础学习SDL开发之在Android使用SDL2.0渲染PNG图片

在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张bmp图,但是如果是一张png或者一张jpg的图,那么还能显示成功么?答案是否定的 我们需要移植SDL_image库来支持除bmp之外的图片格式。 一、移植SDL_image库: 使用如下命令,从SDLMercurial获取SDL_image的源码: hg clone https://...

WPF:设置MenuItem多种不同状态图标

需求描述:   给MenuItem内部的子Image设置默认图标(鼠标leave)、鼠标hover图标、和选中时的图标。   注:是给Menu内个别MenuItem修改,并且是弹出子菜单。 问题描述:   1)前提:Image绑定数据源成功,且Image设置默认图标(鼠标leave)、鼠标hover图标,已经在Image的对应事件中,通过image.sou...

WPF中TreeView的展开 (转)

http://blog.163.com/qiulei_21/blog/static/35071722201122452818390/ 在网上找了很多资料,但是都是云山雾绕的,看了很久看不懂,今天终于在我同事的帮助下搞定了,要充分利用TreeViewItem的IsExpanded属性啊。 任务:树节点的展开,包括全展开,点击节点的展开,某一层节点的展开。...

[WPF](小结4)TreeView的数据分层模板

前边研究的是某控件嵌套某控件,这里相当于树嵌套树,但这里不能这么叫,树很特殊,它有一个分层数据模板:HierarchicalDataTemplate,现在来看如何使用, 第一:选构建题目类,再建一个选项类,题目类集合中的每个项包含一个选项类集合,即数组嵌套数组,C#语句如下: (为方便看清语句,类直接写在主程序中) C#代码如下:usingSyste...