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

包装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. C#_MVC_分页update

    private static string getLinkHtml(UrlHelper urlHelper, bool useAjax, string ajaxSuccessFunction, str ...

  2. C# for AUTOCAD ActiveX获取图形对象坐标程序

    C# for AUTOCAD ActiveX获取图形对象坐标程序 using System;using System.Collections.Generic;using System.Componen ...

  3. SQL Server I/O 问题的诊断分

    一. SQL Server 什么时候和磁盘打交道: 1. SQL 需要访问的数据没有在Buffer pool中,第一次访问时需要将数据所在的页面从数据文件中读取到内存中.(只读) 2. 在insert ...

  4. Makefile的规则

    在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则:最基本的编写规则的方法是从最终的源程序文件一个一个的查看源码文件.把它们要生成的目标文件作为目标,而C语言源码文件和源 ...

  5. matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)

    函数功能:生成稀疏矩阵 使用方法 :S = sparse(A) 将矩阵A转化为稀疏矩阵形式,即矩阵A中任何0元素被去除,非零元素及其下标组成矩阵S.如果A本身是稀疏的,sparse(S)返回S. S ...

  6. 使用SQL循环打印'*'菱形

    菱形每一行都是由n个' ' + n 个'**' + 1个'*' 组成的 例如高度为9的菱形(共print 9次),*最多的一次print为第五次第五次就是0个' '  + 4个'**' + 1个'*' ...

  7. 301页面转向 php

    新建301.php页面,在程序入口文件index.php引用301.php页面 301.php内容如下,仅用于参考: <?php$the_host = $_SERVER['HTTP_HOST'] ...

  8. IPayablebillItf

    package nc.itf.arap.payablebill; import nc.vo.pub.AggregatedValueObject; import nc.vo.pub.BusinessEx ...

  9. java 反射机制探究

    一 反射机制操作类的成员变量 二 操作类的方法 三 利用反射实例化类 四 利用反射访问一个类的私有成员  五 利用反射覆盖数据对象的toString 方法

  10. tlb,tlh,tli文件的关系

    tlb文件:com类型库文件.在需要使用对应com类的模块里,“#import ...*.tlb”使用之. tlh.tli文件:他们是vc++编译器解析tlb文件生成的标准c++文件.因为odl和tl ...