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

包装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. [Effective C++ --024]若所有参数皆需类型转换,请为此采用non-member函数

    引言 假设我们有这样的类: class A{ public: A(, ) {}; int num() const; int den() const; const A operator* (const ...

  2. ios快捷键

    分屏:cmd + option + return 退出分屏:cmd + return cmd + option + [ 代码上跳 cmd + [ 代码左移

  3. 使用webView制作浏览器

    xml文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  4. 最小生成树------Prim算法

    定义:设G=(V,E)是一个无向连通图.如果G的生成子图T=(V,E’)是一棵树,则称T是G的一棵生成树(Spanning Tree). 应用生成树可以得到关于一个电网的一组独立的回路方程.第一步是要 ...

  5. EL标签库

    首先要导入jar包 jst1.jar   standard.jar 在页面中引入标签库 <%@taglib uri="..." prefix=".."%& ...

  6. popen pclose 不等待命令执行完毕

    $handle = popen("start D:\\test.bat", "r"); //exec("start D:\\test.bat" ...

  7. iOS-深复制(mutableCopy)与浅复制(copy)

    浅复制:只复制指向对象的指针,而不复制引用对象本身.对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只是一个指针,对象本身资源还是只有一份(对象引用计数+1),那如果我们对A_copy执 ...

  8. percent-encode 百分号编码

    原文地址:http://www.imkevinyang.com/2009/08/详解javascript中的url编解码.html 摘要 URI(统一资源标识)编解码 为什么需要编码 哪些需要编码 如 ...

  9. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记2 Xcode、Auto Layout及MVC

    原文链接不知道在哪, 接着上一话来讲,上一话中讲到了MVC,那么MVC在IOS8开发中是如何应用的呢?Paul Hegarty老师给我们展示了一个计算器的Demo,首先新建一个工程,老师把AppDel ...

  10. C#嵌套类型

    1.什么是嵌套类型:在类和结构内部定义的类型称为嵌套类型,例如 class Container { class Nested { Nested() { } } } 2.不管外部类型是结构还是类.嵌套类 ...