废话不多数,先上效果图和代码:

包装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控件添加行序号功能的更多相关文章

  1. WPF学习- AllowDrop 用户控件启用拖放功能

    知识点: 创建自定义用户控件(UserControl) 使用户控件成为拖动源 使用户控件成为放置目标 使面板能够接收从用户控件放置的数据 创建项目: 1.新建WPF项目(Wpf-AllowDrop) ...

  2. DevExpress的GridControl控件更新數據問題解決辦法

    開發WPF程序時,使用Devexpress的GridControl控件用ItemSource綁定數據,在頁面進行編輯時,當屬性繼承INotifyPropertyChanged接口時會同步更新後臺數據. ...

  3. 在WPF中使用WinForm控件方法

    1.      首先添加对如下两个dll文件的引用:WindowsFormsIntegration.dll,System.Windows.Forms.dll. 2.      在要使用WinForm控 ...

  4. DevExpress控件的GridControl控件小结

    DevExpress控件的GridControl控件小结 (由于开始使用DevExpress控件了,所以要点滴的记录一下) 1.DevExpress控件组中的GridControl控件不能使横向滚动条 ...

  5. CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)

    事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...

  6. WPF中的image控件的Source赋值

    WPF中的Image控件Source的设置 1.XAML中 简单的方式(Source="haha.png"); image控件的Source设置为相对路径后(Source=&quo ...

  7. Winform 中DataGridView控件添加行标题

    有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...

  8. WPF Adorner+附加属性 实现控件友好提示

    标题太空泛,直接上图 无论是在验证啊,还是提示方面等一些右上角的角标之类的效果,我们会怎么做? 这里介绍一种稍微简单一些的方法,利用附加属性和Adorner来完成. 例如WPF自带的控件上要加这样的效 ...

  9. WPF后台设置xaml控件的样式System.Windows.Style

    WPF后台设置xaml控件的样式System.Windows.Style 摘-自 :感谢 作者: IT小兵   http://3w.suchso.com/projecteac-tual/wpf-zhi ...

随机推荐

  1. jni 之helloworld

    前言:     作为android开发程序员,有的时候不得不和c,c++进行交互,有时候,需要把自己的应用加入一些特效,2d的或者3d的,特别是立志或者想要转向android游戏开发(目前所知,coc ...

  2. 自定义ZXing二维码扫描界面并解决取景框拉伸等问题

    先看效果 扫描内容是下面这张,二维码是用zxing库生成的 由于改了好几个类,还是去年的事都忘得差不多了,所以只能上这个类的代码了,主要就是改了这个CaptureActivity.java packa ...

  3. ssh docker container

    docker run -d -p 127.0.0.1:33301:22 centos6-ssh ssh登陆容器: ssh root@127.0.0.1 -p 33301

  4. Flume简介与使用(二)——Thrift Source采集数据

    Flume简介与使用(二)——Thrift Source采集数据 继上一篇安装Flume后,本篇将介绍如何使用Thrift Source采集数据. Thrift是Google开发的用于跨语言RPC通信 ...

  5. 聊聊css盒子模型

    css盒子模型原理: 在网页设计中常听的属性名:内容(content).填充/内边距(padding).边框(border).外边距(margin), CSS盒子模式都具备这些属性. 这些属性我们可以 ...

  6. Orchard 学习-安装Orchard

    前段时间使用一个ABP的框架进行了一个简单CMS开发.但感觉自己开发CMS不够灵活和通用,所以还是学习一下Orchard.学习的第一步,阅读官方的文档.由于是英文,所以我对其进行了翻译和记录,方便自己 ...

  7. 【JQuery基础教程(第三版)图灵】笔记

    第1章 jQuery入门 1.jQuery官方网站:http://jquery.com   2.开发工具:Firebug         第2章 选择元素 1.属性选择符:属性选择符通过HTML元素的 ...

  8. ASP的高效率的分页算法.net,php同样可以参考

    一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法.对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了. 先来说说 ...

  9. LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”

    解决方法即 where后加 .Compile()

  10. 实现ios屏幕的横竖屏自适应

    整理总结中... 刷新 可以通过 -setNeedsUpdateConstraints -layoutIfNeeded 两个方法来刷新约束的改变,使UIView重新布局, 和CoreGraphic的- ...