为WPF版的GridControl控件添加行序号功能
废话不多数,先上效果图和代码:
包装GridControl控件
cs
using DevExpress.Xpf.Data;
using DevExpress.Xpf.Grid;
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 WPFDemo
{
/// <summary>
/// PageGridControl.xaml 的交互逻辑
/// </summary>
public partial class UCGridControl : GridControl
{
private Visibility showOrderNum = Visibility.Collapsed;
/// <summary>
/// 是否显示序号
/// </summary>
public Visibility ShowOrderNum
{
get
{
return showOrderNum;
}
set
{
showOrderNum = value;
if (value == Visibility.Visible)
{
tbv.IndicatorWidth = ;
var dt = this.FindResource("DataTemplate1") as DataTemplate;
if (dt != null)
tbv.RowIndicatorContentTemplate = dt;
}
}
}
/// <summary>
/// 序号列宽度
/// </summary>
public double OrderNumWidth
{
get
{
return tbv.IndicatorWidth;
}
set
{
tbv.IndicatorWidth = value;
}
} public UCGridControl()
{
InitializeComponent(); }
} /// <summary>
/// 行序号转换器
/// </summary>
public class RowOrderNumConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var rowHandle = value as RowHandle;
if (rowHandle != null)
{
int num = rowHandle.Value;
return (num + );
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ;
}
}
}
xmal
<dxg:GridControl x:Class="WPFDemo.UCGridControl"
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"
xmlns:local="clr-namespace:WPFDemo"
xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid"
xmlns:dxgt="http://schemas.devexpress.com/winfx/2008/xaml/grid/themekeys"
xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors"
x:Name="uc"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<dxg:GridControl.Resources>
<local:RowOrderNumConverter x:Key="RowOrderNumConverter"/>
<DataTemplate x:Key="DataTemplate1">
<Border x:Name="errorIndicatorBorder" Background="Transparent">
<Grid>
<TextBlock x:Name="txtOrderNum" TextAlignment="Center" Text="{Binding RowHandle,Converter={StaticResource RowOrderNumConverter}}" Visibility="{Binding ShowOrderNum, ElementName=uc}" />
<ContentPresenter x:Name="iconPresenter">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Grid/>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>
</Grid>
</Border>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IndicatorState}" Value="Focused">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=FocusedIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="Changed">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=ChangedIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="NewItemRow">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=NewItemRowIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="Editing">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=EditingIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="Error">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=ErrorIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="FocusedError">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=FocusedErrorIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding IndicatorState}" Value="AutoFilterRow">
<Setter Property="ContentTemplate" TargetName="iconPresenter" Value="{DynamicResource {dxgt:RowIndicatorThemeKey ResourceKey=AutoFilterRowIconTemplate}}"/>
<Setter Property="Visibility" TargetName="txtOrderNum" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding (dxe:BaseEdit.HasValidationError)}" Value="True">
<Setter Property="ToolTip" TargetName="errorIndicatorBorder">
<Setter.Value>
<DockPanel>
<dxe:ErrorControl Content="{Binding (dxe:BaseEdit.ValidationError)}"/>
<ContentPresenter Content="{Binding (dxe:BaseEdit.ValidationError).ErrorContent}" VerticalAlignment="Center"/>
</DockPanel>
</Setter.Value>
</Setter>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</dxg:GridControl.Resources>
<dxg:GridControl.View>
<dxg:TableView x:Name="tbv"/>
</dxg:GridControl.View>
</dxg:GridControl>
使用
<local:UCGridControl x:Name="gc">
<dxg:GridControl.Columns>
<dxg:GridColumn FieldName="Name" Header="Name"/>
</dxg:GridControl.Columns>
</local:UCGridControl> var list = new List<object>();
for (int i = 0; i <; i++)
{
list.Add(new { Name="test"+(i+1)});
}
gc.ItemsSource = list;
gc.ShowOrderNum = Visibility.Visible;
主要代码是重新设置TableView的行标题模板:
<DataTemplate x:Key="DataTemplate1">
<Border x:Name="errorIndicatorBorder" Background="Transparent">
<Grid>
<TextBlock x:Name="txtOrderNum" TextAlignment="Center" Text="{Binding RowHandle,Converter={StaticResource RowOrderNumConverter}}" Visibility="{Binding ShowOrderNum, ElementName=uc}" />
......
var dt = this.FindResource("DataTemplate1") as DataTemplate;
if (dt != null)
tbv.RowIndicatorContentTemplate = dt;
绑定的RowHandle属性包含行索引,使用个转换器加1就可以转换成序号了。
源代码路径:https://github.com/yangxinwen/GitHubDemo/tree/master/WPFDemo
为WPF版的GridControl控件添加行序号功能的更多相关文章
- WPF学习- AllowDrop 用户控件启用拖放功能
知识点: 创建自定义用户控件(UserControl) 使用户控件成为拖动源 使用户控件成为放置目标 使面板能够接收从用户控件放置的数据 创建项目: 1.新建WPF项目(Wpf-AllowDrop) ...
- DevExpress的GridControl控件更新數據問題解決辦法
開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時會同步更新後臺數據. ...
- 在WPF中使用WinForm控件方法
1. 首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2. 在要使用WinForm控 ...
- DevExpress控件的GridControl控件小结
DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...
- CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)
事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...
- WPF中的image控件的Source赋值
WPF中的Image控件Source的设置 1.XAML中 简单的方式(Source="haha.png"); image控件的Source设置为相对路径后(Source=&quo ...
- Winform 中DataGridView控件添加行标题
有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...
- WPF Adorner+附加属性 实现控件友好提示
标题太空泛,直接上图 无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成. 例如WPF自带的控件上要加这样的效 ...
- WPF后台设置xaml控件的样式System.Windows.Style
WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵 http://3w.suchso.com/projecteac-tual/wpf-zhi ...
随机推荐
- jni 之helloworld
前言: 作为android开发程序员,有的时候不得不和c,c++进行交互,有时候,需要把自己的应用加入一些特效,2d的或者3d的,特别是立志或者想要转向android游戏开发(目前所知,coc ...
- 自定义ZXing二维码扫描界面并解决取景框拉伸等问题
先看效果 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java packa ...
- ssh docker container
docker run -d -p 127.0.0.1:33301:22 centos6-ssh ssh登陆容器: ssh root@127.0.0.1 -p 33301
- Flume简介与使用(二)——Thrift Source采集数据
Flume简介与使用(二)——Thrift Source采集数据 继上一篇安装Flume后,本篇将介绍如何使用Thrift Source采集数据. Thrift是Google开发的用于跨语言RPC通信 ...
- 聊聊css盒子模型
css盒子模型原理: 在网页设计中常听的属性名:内容(content).填充/内边距(padding).边框(border).外边距(margin), CSS盒子模式都具备这些属性. 这些属性我们可以 ...
- Orchard 学习-安装Orchard
前段时间使用一个ABP的框架进行了一个简单CMS开发.但感觉自己开发CMS不够灵活和通用,所以还是学习一下Orchard.学习的第一步,阅读官方的文档.由于是英文,所以我对其进行了翻译和记录,方便自己 ...
- 【JQuery基础教程(第三版)图灵】笔记
第1章 jQuery入门 1.jQuery官方网站:http://jquery.com 2.开发工具:Firebug 第2章 选择元素 1.属性选择符:属性选择符通过HTML元素的 ...
- ASP的高效率的分页算法.net,php同样可以参考
一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法.对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了. 先来说说 ...
- LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”
解决方法即 where后加 .Compile()
- 实现ios屏幕的横竖屏自适应
整理总结中... 刷新 可以通过 -setNeedsUpdateConstraints -layoutIfNeeded 两个方法来刷新约束的改变,使UIView重新布局, 和CoreGraphic的- ...