RadPivotFieldList 如何给 choose fields 分组/层次显示
来源:互联网 发布:阿里云域名登录 编辑:程序博客网 时间:2024/05/22 15:09
先上图,RadPivotFieldList 最终效果如下:
View :
<pivot:RadPivotFieldList Name="PivotFieldList" DataProvider="{Binding PivotDataSrcProvider,Mode=TwoWay}" />
ViewModel:
private LocalDataSourceProvider pivotDataSrcProvide;
public LocalDataSourceProvider PivotDataSrcProvider
{
get
{
return pivotDataSrcProvide;
}
set
{
pivotDataSrcProvide = value;
RaisePropertyChanged(() => PivotDataSrcProvider);
}
}
需要设置 PivotDataSrcProvider.ItemsSource ,它是一个 DataSet,DataTable 是这样定义 columns 的:
var dt = new DataTable();
#region shipment route
//origin/pol
dt.Columns.Add(new DataColumn("Shipment Route.Origin/POL.Origin/POL Country", typeof(string)) { Caption = "Origin/POL Country" });
dt.Columns.Add(new DataColumn("Shipment Route.Origin/POL.Origin/POL Code", typeof(string)) { Caption = "Origin/POL Code" });
//via / pod
dt.Columns.Add(new DataColumn("Shipment Route.Via / POD.Via / POD Country", typeof(string)) { Caption = "Via / POD Country" });
dt.Columns.Add(new DataColumn("Shipment Route.Via / POD.Via / POD Code", typeof(string)) { Caption = "Via / POD Code" });
//destination
dt.Columns.Add(new DataColumn("Shipment Route.Destination.Destination Country", typeof(string)) { Caption = "Destination Country" });
dt.Columns.Add(new DataColumn("Shipment Route.Destination.Destination Code", typeof(string)) { Caption = "Destination Code" });
dt.Columns.Add(new DataColumn("Shipment Route.Flight No", typeof(string)) { Caption = "Flight No" });
#endregion
我们需要的分组在 column name 里面,Shipment Route.Destination.Destination Country,在这里还只是字符串,让它在 choose fields 里面变成分组显示的关键代码在这里:
var nodetree = new Dictionary<string, ContainerNode>();
var fdprovider = new LocalDataSourceFieldDescriptionsProvider();
fdprovider.AddingContainerNode+= (sender, e) =>
{
var namepath = string.Empty;
var names = (e.ContainerNode.Name ?? string.Empty).Split('.').Where(c => !string.IsNullOrEmpty(c))
.Reverse().Skip(1).Reverse();
var leaf = e.ContainerNode;
ContainerNode curnode = null;
foreach (var name in names)
{
namepath += name + ".";
ContainerNode existingnode;
if (!nodetree.TryGetValue(namepath, out existingnode))
{
var subnode = new ContainerNode(name, ContainerNodeRole.Folder);
nodetree[namepath] = subnode;
if (curnode == null)
{
curnode = subnode;
e.ContainerNode = curnode;
}
else
{
curnode.Children.Add(subnode);
curnode = subnode;
}
}
else
{
e.Cancel = true; // folder already exist in tree
curnode = existingnode;
}
}
if (curnode != null)
{
curnode.Children.Add(leaf);
}
};
PivotDataSrcProvider.FieldDescriptionsProvider = fdprovider;
PivotDataSrcProvider.ItemsSource = data;
到这里需要的代码就差不多完成了。
下面说明一下 DataTable 定义 columns 时附加 caption 的意义, 添加 columns 时,有 column name 和 type 就够了,有没有 caption 都没所谓的,但是不设 caption 的话,默认会用 column name 作 caption,这样 choose fields 以及选中字段以后的 row labels 里面,我们看到的字段会是很长一串字符,而在 PivotDataSrcProvider 里面想改caption 非常困难(至少我没有找到合适的方法来设置caption),所以如果只想显示最终字段名就在 DataTable 里面设一下 column 的 caption ,这是目前最简洁的办法了。
- RadPivotFieldList 如何给 choose fields 分组/层次显示
- 如何获取 RadPivotFieldList 中的 Row / Column Labels 里面的 filter
- 如何实现数据库分组显示
- 如何实现数据库分组显示
- SQL 如何给各自分组添加序号
- pivotGridControl控件显示 Drop Fildter Fields Here 如何去掉
- Android studio 如何让包有层次显示
- Android studio 如何让包有层次显示
- dedecms文章列表如何分组显示
- 【如何给Win8开始屏幕应用命名分组?】
- 如何给jqGrid表格按照字段进行分组
- 如何给jqGrid表格按照字段进行分组
- sql如何分组选择显示最新的一条数据
- 如何给QTreeView的节点显示图标
- 如何给QTreeView的节点显示图标
- MFC 如何给Dialog 显示Menu菜单。
- iOS开发 自定义tableView样式(使用代码/使用Interface Builder)、分组显示、给TableView增加索引、给TableView增加SearchBar
- 分层显示类别层次
- 初识Volley的基本用法
- 自定义Toast样式,位置
- [Oracle拾遗]创建表空间、创建用户以及授权、查看权限
- java实现excel的导入导出(poi详解)
- Android开发官方文档---Managing Audio Playback
- RadPivotFieldList 如何给 choose fields 分组/层次显示
- 仿微信中加载网页时带线行进度条的WebView的实现
- 终于找到海底的丢失的大铁锚
- IIS 7上部署PHP
- Android设计模式之建造者模式(builder pattern)
- Java中遍历Map的两种方法:keySet和entrySet
- 单片机多任务的时间片方式实现
- ALSA声卡驱动中的DAPM详解之一:kcontrol
- 深入分析Docker镜像原理