f:Tree
来源:互联网 发布:淘宝宝贝详情页怎么做 编辑:程序博客网 时间:2024/06/05 16:58
<f:Tree ID="Tree1" Width="400px" Height="450" ShowHeader="true" EnableCollapse="true" Title="树控件" runat="server" OnNodeCommand="AddressInfoTree_NodeCommand"> </f:Tree>
第一个写的FineUI结构。
ID作为控件的名字可以在behind里面直接用来便是tree控件,ShowHeader显示FineUI自定义的表头,EnableCollapse 是否允许打开关闭, Title控件表头展示的文字,runat="server" 默认属性表示在服务器端运行的程序,ONNodeCommand这个是比价重要的属性当点击节点触发的方法(补充一下还有很多的点击事件,一般都是有On来开头的,我们可以按space键就能调出fineui的)在后台代码中实现对应的方法,这个方法要有自己固有的参数AddressInfoTree_NodeCommand(object sender, TreeCommandEventArgs e),否则会有重载均与委托不匹配错误的产生。合理的配置参数。
实现一下功能:
1.绑定数据源,tree的数据源是dataset是一种数据和数据关系的集合
treeTable = new DataTable(); DataColumn tColumn1 = new DataColumn("Id", typeof(string)); DataColumn tColumn2 = new DataColumn("Text", typeof(string)); DataColumn tColumn3 = new DataColumn("ParentId", typeof(string)); treeTable.Columns.Add(tColumn1); treeTable.Columns.Add(tColumn2); treeTable.Columns.Add(tColumn3);建立一个数据库的表,定义了自己的表头id,文本,父id,之后是向表袁术中添加数据
DataRow row = treeTable.NewRow(); row[0] = rootId; row[1] = "全部数据"; row[2] = DBNull.Value; treeTable.Rows.Add(row);根节点的定义一般是这样的,没有父节点
DataRow row = treeTable.NewRow(); row[0] = "id1"; row[1] = "数据1"; row[2] = "paraId1"; treeTable.Rows.Add(row);再添加一些数据进去,这时候我们的表示没有什么关系的。现在我们要建立的树形关系
treeDataSet = new DataSet(); treeDataSet.Tables.Add(treeTable); //设置父子关系 treeDataSet.Relations.Add("TreeRelation", treeDataSet.Tables[0].Columns["Id"], treeDataSet.Tables[0].Columns["ParentId"]);建立dataset对象,将表添加到dataset里面,为table的某两列添加父子关系,完成这一步后我们的table就有了树形的结构(一个table只能加入一个dataset,只能有一个关系管理的工具)
row.IsNull("paraId");//这是主节点特有的属性,没有父亲,不是关系带的 row.GetParentRow(); row.GetChildRows();这时候我们就可以用表关系,建立树关系了:在线代码
private void LoadTreeData() { foreach (DataRow row in treeDataSet.Tables[0].Rows) { if (row.IsNull("ParentId")) { TreeNode node = new TreeNode(); node.NodeID = row["Id"].ToString(); node.Text = row["Text"].ToString(); node.Expanded = true; //添加根节 Tree1.Nodes.Add(node); //允许点击事件 node.EnableClickEvent = true; //表中的行和其对应在书中的节点 ResolveSubTree(row, node); } } } private void ResolveSubTree(DataRow dataRow, TreeNode treeNode) { DataRow[] rows = dataRow.GetChildRows("TreeRelation"); if (rows.Length > 0) { treeNode.Expanded = false; foreach (DataRow row in rows) { TreeNode node = new TreeNode(); if (row["ParentId"].Equals(rootId)) { //默认打开一级节点 treeNode.Expanded = true; } node.NodeID = row["Id"].ToString(); node.Text = row["Text"].ToString(); //允许点击事件 node.EnableClickEvent = true; treeNode.Nodes.Add(node); ResolveSubTree(row, node); } } }这一段我几乎没改,就是先找到根节点,设置根节点,然后在递归添加所有的孩子节点
到目前为止我们的数据准备工作就做好了,运行之后就能有一个树形的结构了
2.还有一些比较重要操作
//设置表的主键 treeDataSet.Tables[0].PrimaryKey = new DataColumn[] { treeDataSet.Tables[0].Columns["Id"] };
DataRow row = treeTable.Rows.Find(nodeId);为表结构设置主键,这里是在dataset里面弄得,单独拿表来弄也是好的。
然后根据主键查找就可以找到我们想要的表数据了,这里的find的有很多的重载方法,功能远比这个要强大。
TreeNode node = Tree1.FindNode(row[0].ToString());在建立树关系的时候我们就将rowid赋值给了nodeId,这里也可以根据id值找到tree的节点了,Select方法可以实现更多的查找
这里说一下我在命名id时候做的事情,因为对这片代码的函数认识的不轻,于是就让id起了一些标记的作用
例如我有一个级层关系中国,河北,沧州,那么我命名的时候就会取名zhongguo_hebei_cangzhou这样我们可以通过id就知道他的树和表的父亲id(当然我们还有其他的方式获取,例如treeNode.ParentNode()也可以递归实现),他的一个好处是不用担心id重复(2个地方都有新华小区)
这里用到了一个汉字转拼音的dll,只需要引用dll,声明命名空间就可以用了
http://download.csdn.net/detail/u010673842/9722205
3.设置树的选中节点
selectedNode不行是只读属性,但是selectedNodeId是可以设置的也可以实现修改当前节点的功能。
先写到这。
- f:Tree
- CodeForces 762F. Tree nesting
- CodeForces 762F. Tree nesting
- [Educational Codeforces Round 17 F (762F)] Tree nesting
- Codeforces Gym 100623F Problem F. Fenwick Tree
- CF 379F: New Year Tree
- CodeForces#375 - F-st-Spanning Tree 构造
- hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)
- codeforces 379F New Year Tree 在线LCA
- hdu4786 Fibonacci Tree (2013 Asia Chengdu Regional Contest problem F)
- Codeforces Round #375 (Div. 2) F. st-Spanning Tree
- Codeforces 723F st-Spanning Tree(连通性乱搞)
- Codeforces Round #375 (Div. 2) F. st-Spanning Tree
- AtCoder Grant Contest 10 F - Tree Game 博弈 dfs
- Codeforces 723F st-Spanning Tree【贪心Kruskal】
- [Segment tree Beats! || 分块] Codeforces 793F Tinkoff Challenge
- [并查集 构造] Codeforces 723F#375 (Div. 2) F. st-Spanning Tree
- f
- Android Next 公共组件库:Android-Next
- iOS开发如何跳转到系统设置或功能?
- NOJ 1018 选太子
- SpringMVC中使用Interceptor拦截器
- leetcode-104. Maximum Depth of Binary Tree
- f:Tree
- ts打包代码详解 (ffmpeg)
- zabbix监控mongodb
- 蓝桥杯BASIC_29(高精度加法)
- 场景切换变暗问题
- 通讯录(数据结构)
- 哥德巴赫猜想
- 《从零开始学Swift》学习笔记(Day 64)——Cocoa Touch设计模式及应用之目标与动作
- 相机标定资源URL