TreeList 用含有树形结构的数据源绑定显示

目的很明确,直接贴代码(反射一个对象,将属性存入DataTable中绑定显示):

public static DataTable CreateDataTabele( object obj)

{

DataTable dt = new DataTable();

DataColumn did = new DataColumn("ID", Type.GetType("System.Int32"));//ID

DataColumn dParentID = new DataColumn("ParentID", Type.GetType("System.Int32"));//父节点ID

DataColumn dNodeName = new DataColumn("Name", Type.GetType("System.String"));//节点名

DataColumn dNodeCaption = new DataColumn("Caption", Type.GetType("System.String"));//节点中文名

DataColumn dCanAdded = new DataColumn("CanAdded", Type.GetType("System.Boolean"));//是否包含子节点

DataColumn dNodeProperty = new DataColumn("NodeProperty", Type.GetType("System.String"));//属性

DataColumn dType = new DataColumn("NodeType", Type.GetType("System.String"));

DataColumn dChildName = new DataColumn("NodeChildName", Type.GetType("System.String"));

DataColumn dValue = new DataColumn("NodeValue", Type.GetType("System.Object"));

dt.Columns.AddRange(new DataColumn[] { dParentID, did, dNodeName, dNodeCaption, dCanAdded, dNodeProperty , dType, dChildName,dValue });

int id = 1;

int pid = 0;

DataRow dw = dt.NewRow();

dw["ID"] = id;

dw["ParentID"] = pid++;

dw["Name"] = "FormConfig";

dw["Caption"] = "XXX节点";

dw["CanAdded"] = false;

dt.Rows.Add(dw);

ReflectObject(obj, ref dt,ref id, pid, 0);

return dt;

}

///递归反射节点

private static void ReflectObject(object obj, ref DataTable dt, ref int id, int pid, int pID)

{

if (obj == null) return;

Type type = obj.GetType();

foreach (PropertyInfo pi in type.GetProperties())

{

DataRow dw = dt.NewRow();

dw["ID"] = ++id;

dw["ParentID"] = pid;

dw["Name"] = pi.Name.ToString();

if ((pi.GetCustomAttributes(true)).Count() > 0) dw["Caption"] = ((DescriptionAttribute)(pi.GetCustomAttributes(true))?[0]).Description;

dw["CanAdded"] = false;

if (pi.PropertyType.Name.ToLower().Equals("list`1"))

{

dw["CanAdded"] = true;

}

dt.Rows.Add(dw);

pID = id ;

if (!(pi.PropertyType).IsPrimitive)

{

if (pi.PropertyType.Name != "String")

{

var proValue = pi.GetValue(obj, null);

if (proValue == null)

{

////个人使用的单例创建对象   于读者无关

if(ToolHelper._dicCreate.ContainsKey(pi.PropertyType.Name))

{

proValue = ToolHelper._dicCreate[pi.PropertyType.Name].Invoke();

}

pi.SetValue(obj, proValue, null);

}

ReflectObject(proValue, ref dt, ref id, pID, 0);

}

}

}

}

时间: 2024-08-30 13:49:58

TreeList 用含有树形结构的数据源绑定显示的相关文章

Silverlight项目笔记7:xml/json数据解析、MVVM下实现多级树形结构TreeView、忽视引用类型导致数据绑定错误、通过流或动态空间加载图片、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题

涉及的内容主要有: 1.xml/json数据解析 2.多级树形结构TreeView 3.忽视引用类型导致数据绑定错误 4.通过流或动态空间加载图片 5.虚拟目录设置 6.silverlight安全机制引发的问题 7.webclient缓存问题 1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应节点的数据集合,再通过Element这个方法对数据集合进

C#中数据源绑定DataSource以及相关控件(DataGridView)的使用总结

我们在编程过程中,会涉及到表格数据的显示,存储等,就可能涉及到DataGridView,DataSource, DataTable等概念. 下面我就我自己模糊的一些知识点串讲以下: 1)首先我要讲的是一些控件: Control: 控件基类,有一个DataBindings对象,它是一个ControlBindingCollection类,这个类继承与BindingsCollection,里面有一个Binding的列表对象,其中Binding对象时一个记录了属性名,数据源,数据成员等的对象.还有个Bi

Delphi中根据分类数据生成树形结构的最优方法

一. 引言:    TreeView控件适合于表示具有多层次关系的数据.它以简洁的界面,表现形式清晰.形象,操作简单而深受用户喜爱.而且用它可以实现ListView.ListBox所无法实现的很多功能,因而受到广大程序员的青睐.    树形结构在Windows环境中被普遍应用,但在数据库开发中面对层次多.结构复杂的数据,如何快速构造树形目录并实现导航呢?    二. 实现关键技术:    在Delphi提供的控件中包含了TreeView控件,但树的具体形成还需要用户编写代码.即它的列表项要在程序

WPF实现完美的树形结构和右键菜单(上)

要想做出完美的树形结构和右键菜单必须要注意一下几个方面 一:TreeView的样式 二:数据的展示和数据绑定 三:数据的的组织和生成(递归) 看下图效果: 首先来看TreeView的样式的实现: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml

通用列表数据转化为树形结构

近期做项目用的是JQuery  easyUI 控件, 尽管非常强大,可是高级控件对于数据的格式要求比較严格遇到 例如以下问题 1.使用comboTree 控件   绑定树形的组织结构   可是 数据库查到的数据格式是 列表形式,并不符合  combotree的数据结构 以下是我的数据和  combotree 数据个对照 通用的数据结构   命名A "[{"UnitID":"7cf57594a7074c46b94dcd6c985b0ced","Un

树形结构应用

一切具有集合特性的事物都可以抽象成树形结构,例如表格是一个具有行集合与列集合的大集合,其实现方式也可以用树形结构来表示. SNMP简单网络管理协议的mib就是一棵层级树,它定义了用oid.0访问的普通叶子节点和用列节点oid.(行)index访问的表格节点,表节点名称通常用Table作为后缀,表节点下的列集合节点名称通常用Entry作为后缀,而列节点名称则各不相同,不过也有些专有后缀比如RowStatus.SNMP是如何用树形结构来表示表格的呢?其实它就是通过给列节点下的元素设置index索引的

sharepoint 2013 获取文档库文件夹树形结构

sharepoint 2013 获取文档库文件夹树形结构 分类: sharepoint2013-07-15 06:40 5816人阅读 评论(0) 收藏 举报 在做sharepoint 2013或者sharepoint 2010文档库的过程中,经常会建很多的文件夹,不同类别存储不同文件,相当于文档的分类,这里主要是记录一下,将文档库的文件夹结构,绑定到treeview. protected  void  Page_Load(object sender,EventArgse) { if(!Page

MVC3+EF4.1学习系列(十)----MVC+EF处理树形结构

通过前几篇文章 我们处理了 一对一, 一对多,多对多关系 很好的发挥了ORM框架的做用 但是 少说了一种 树形结构的处理, 而这种树形关系 我们也经常遇到,常见的N级类别的处理, 以及经常有数据与类别挂钩.今天主要写下EF处理树形结构以及 MVC如何展示树形结构. 前面几篇的例子 一直用的是一个例子,内容是连贯的.这篇是完全单独的~ 先来说下工作中会遇到的常见场景 针对这几个场景来处理~ 1.类别 a.类别可以有无限级别 b.类别的最末端 不确定是第几级 某个节点 可以到二级 其他的节点 有可能

VBA读取文件夹下所有文件夹及文件内容,并以树形结构展示

Const TR_LEVEL_MARK = "+"Const TR_COL_INDEX = "A"Const TR_COL_LEVEL = "E"Const TR_COL_NAME = "C"Const TR_COL_COUNT = "D"Const TR_COL_TREE_START = "F"Const TR_ROW_HEIGHT = 23Const TR_COL_LINE_WIDT