全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结
来源:互联网 发布:linux uname 编辑:程序博客网 时间:2024/06/12 01:25
全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结
/*筛选篇*/ private void 树开花() { 树.Nodes.Clear(); string[] 重组表列 = null; List<int[,]> 图标序集 = new List<int[,]>();/* List<int[,]> 图标序集 = new List<int[,]>(new int[][,] { new int[,] { { 0, 16 } } });*/ Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表.Invoke(); if (表.TableName == "人员") { 重组表列 = new string[] { "归属", "姓名", "生日" }; 图标序集.Add(new int[,] { { 0, 16 }, { 5, 15 } }); } if (表.TableName == "提示") { 重组表列 = new string[] { "提示内容", "心情日记" }; 图标序集.Add(new int[,] { { 16, 18 } }); } if (表.TableName == "文摘") { 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; 图标序集.Add(new int[,] { { 25, 21 } }); } this.Invoke(new Action(() => { DataTable 树表 = 表.DefaultView.ToTable(true, 重组表列), 根表 = 树表.DefaultView.ToTable(true, 重组表列[0]); foreach (DataRow 数据列 in 根表.Rows)/*父龙*/ { Func<TreeNode, DataRow, int, List<int[,]>, TreeNode> 成节 = (上层节, 数据, 位置, 节图标序集) => 玄龙戏珠无级树(上层节, 数据, 位置, 节图标序集); List<TreeNode> 子节 = new List<TreeNode>(), 节存 = new List<TreeNode>(); DateTime 日期; DataRow[] 子节数据 = null; TreeNode 节点 = new TreeNode(); if (表.TableName == "人员名称" && 图标序集.Count > 0) 图标序集[0][0, 0] = 0;/*条件自编*/ if (图标序集.Count > 0) { 节点.ImageIndex = 图标序集[0][0, 0]; 节点.SelectedImageIndex = 图标序集[0][0, 1]; } 节点.Text = 数据列[0].ToString(); 节点.Tag = 数据列; 树.Nodes.Add(节点); 子节.Add(节点); if (!DateTime.TryParse(节点.Text, out 日期)) 子节数据 = 树表.Select(重组表列[0] + "='" + 节点.Text + "'"); foreach (DataRow 元素 in 子节数据)/*母龙=同步*/ { for (int 级 = 1, 列数 = 重组表列.Length; 级 < 列数; 级++)/*子龙*/ { bool 节控 = false; string 节路径 = ""; if (子节.Count < 列数) { 节点 = 成节(节点, 元素, 级, 图标序集); 子节.Add(节点); }/*龙珠*/ else { for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 元素[数].ToString(); else 节路径 += "\\" + 元素[数].ToString(); } foreach (TreeNode 节数据 in 节存) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } if (节路径 != 子节[级].FullPath || 节控)/*if (元素[级].ToString() != 子节[级].Text || 节控)*/ { 节存.AddRange(子节); 节存 = 节存.Distinct().ToList(); 节存 = 节存.Where(筛选 => 筛选.Level < 列数 - 1).ToList(); 节点 = 成节(子节[级 - 1], 元素, 级, 图标序集); 子节[级] = 节点; } } } } } })); } private TreeNode 玄龙戏珠无级树(TreeNode 节点, DataRow 子节, int 级, List<int[,]> 图标序集) { TreeNode 加子节 = new TreeNode(); 加子节.Tag = 子节; 加子节.Text = 子节[级].ToString(); if (图标序集.Count > 0) { 加子节.ImageIndex = 图标序集[0][0,0]; 加子节.SelectedImageIndex = 图标序集[0][0,1]; } 节点.Nodes.Add(加子节); return 加子节; } private void 加载树图标集() { ImageList 树图标集 = new ImageList(); 树图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\树图标集\\icolicious.ico")); 树图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\树图标集\\观世音菩萨2.bmp")); 树.ImageList = 树图标集; }/*分组篇*/ private void 树开花() { 树.Nodes.Clear(); string[] 重组表列 = null; List<int[,]> 图标序集 = new List<int[,]>();/* List<int[,]> 图标序集 = new List<int[,]>(new int[][,] { new int[,] { { 0, 16 } } });*/ Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表.Invoke(); if (表.TableName == "人员") { 重组表列 = new string[] { "归属", "姓名", "生日" }; 图标序集.Add(new int[,] { { 0, 16 }, { 5, 15 } }); } if (表.TableName == "提示") { 重组表列 = new string[] { "提示内容", "心情日记" }; 图标序集.Add(new int[,] { { 16, 18 } }); } if (表.TableName == "文摘") { 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; 图标序集.Add(new int[,] { { 25, 21 } }); } this.Invoke(new Action(() => { DataTable 树表 = 表.DefaultView.ToTable(true, 重组表列), 根表 = 树表.DefaultView.ToTable(true, 重组表列[0]); foreach (DataRow 数据列 in 根表.Rows)/*父龙*/ { Func<TreeNode, DataRow, int, List<int[,]>, TreeNode> 成节 = (上层节, 数据, 位置, 节图标序集) => 玄龙戏珠无级树(上层节, 数据, 位置, 节图标序集); List<TreeNode> 子节 = new List<TreeNode>(); List<TreeNode>[] 节存 = new List<TreeNode>[重组表列.Length - 2]; for (int 级 = 0, 列数 = 重组表列.Length - 2; 级 < 列数; 级++) { 节存[级] = new List<TreeNode>(); } DateTime 日期; DataRow[] 子节数据 = null; TreeNode 节点 = new TreeNode(); if (表.TableName == "人员名称" && 图标序集.Count > 0) 图标序集[0][0, 0] = 0;/*条件自编*/ if (图标序集.Count > 0) { 节点.ImageIndex = 图标序集[0][0, 0]; 节点.SelectedImageIndex = 图标序集[0][0, 1]; } 节点.Text = 数据列[0].ToString(); 节点.Tag = 数据列; 树.Nodes.Add(节点); 子节.Add(节点); if (!DateTime.TryParse(节点.Text, out 日期)) 子节数据 = 树表.Select(重组表列[0] + "='" + 节点.Text + "'"); foreach (DataRow 元素 in 子节数据)/*母龙=同步*/ { for (int 级 = 1, 列数 = 重组表列.Length; 级 < 列数; 级++)/*子龙*/ { bool 节控 = false; string 节路径 = ""; if (子节.Count < 列数) { 节点 = 成节.Invoke(节点, 元素, 级, 图标序集); 子节.Add(节点); if (级 < 列数 - 1) 节存[级 - 1].Add(子节[级]); }/*龙珠*/ else { for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 元素[数].ToString(); else 节路径 += "\\" + 元素[数].ToString(); } if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存[级 - 1]) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } if (节路径 != 子节[级].FullPath || 节控) { 节点 = 成节.Invoke(子节[级 - 1], 元素, 级, 图标序集); 子节[级] = 节点; if (级 < 列数 - 1) { 节存[级 - 1].Add(子节[级]); 节存[级 - 1] = 节存[级 - 1].Distinct().ToList(); 节存[级 - 1] = 节存[级 - 1].Where(筛选 => 筛选.Level < 列数 - 1).ToList(); } } } } } } })); }/*核心篇分类分组=推荐*/ private void 玄龙戏珠无级树()/*之前写的用筛选已经舍弃,采用构思设计核心实现,同时采用分类分组提高运行速度,生树受影响主要在读数据到表部分.*/ { this.Invoke(new Action(() => { ImageList 图标集 = new ImageList();/*设置与初始化*/ 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\icolicious.ico")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\观世音菩萨2.bmp")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1240000qj.gif")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1930000pf.gif")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\Illustrator 10.ico")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\狮子吼.ico")); 树.ImageList = 图标集; 树.Nodes.Clear(); DataTable 树表 = null; string[] 重组表列 = null; Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表();/*调用vs2010版数据控件自动生成读取数据库到表方法(无参返回值)*/ if (表.TableName == "人员") 重组表列 = new string[] { "归属", "姓名", "生日" }; if (表.TableName == "提示") 重组表列 = new string[] { "提示内容", "心情日记" }; if (表.TableName == "文摘") 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; List<TreeNode> 子节 = new List<TreeNode>(); 子节.Add(new TreeNode()); int 列数 = 重组表列.Length; List<TreeNode>[] 节存 = new List<TreeNode>[列数 - 1]; for (int 级 = 0; 级 != 列数 - 1; 级++) { 节存[级] = new List<TreeNode>(); 子节.Add(new TreeNode()); } 树表 = 表.DefaultView.ToTable(true, 重组表列); /*玄龙戏珠无级树=>开始*/ foreach (DataRow 数据列 in 树表.Rows) { bool 节控 = false; for (int 级 = 0; 级 != 列数; 级++) { string 节路径 = ""; if (树.Nodes.Count == 0) 节控 = true; for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 数据列[数].ToString(); else 节路径 += "\\" + 数据列[数].ToString(); } if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存[级]) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } else 节控 = true; if (节控 && 级 == 0) { TreeNode 节点 = new TreeNode(); 节点.Tag = 数据列; 节点.Text = 数据列[0].ToString(); 节点.ImageIndex = 3; 节点.SelectedImageIndex = 2;/*图标按条件自编*/ 节存[级].Add(节点); 子节[级] = 节点; 树.Nodes.Add(节点); } if (级 > 0 && 节控) { TreeNode 加子节 = new TreeNode(); 加子节.Tag = 数据列; 加子节.Text = 数据列[级].ToString(); 加子节.ImageIndex = 4; 加子节.SelectedImageIndex = 5;/*图标按条件自编*/ if (级 < 列数 - 1) 节存[级].Add(加子节); 子节[级] = 加子节; 子节[级 - 1].Nodes.Add(加子节); } if (级 < 列数 - 1) 节存[级] = 节存[级].Distinct().ToList(); } } })); }/*核心篇*/ private void 玄龙戏珠无级树()/*构思设计核心实现,所以发布纯粹给有兴趣研究代码多种写法的人作参考.*/ { this.Invoke(new Action(() => { ImageList 图标集 = new ImageList();/*设置与初始化*/ 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\icolicious.ico")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\观世音菩萨2.bmp")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1240000qj.gif")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\sucaiwcom-1930000pf.gif")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\Illustrator 10.ico")); 图标集.Images.Add(Image.FromFile(@System.Environment.CurrentDirectory + "\\ICO\\狮子吼.ico")); 树.ImageList = 图标集; 树.Nodes.Clear(); DataTable 树表 = null; string[] 重组表列 = null; Func<DataTable> 数据表 = () => 加载数据(); DataTable 表 = 数据表(); if (表.TableName == "人员") 重组表列 = new string[] { "归属", "姓名", "生日" }; if (表.TableName == "提示") 重组表列 = new string[] { "提示内容", "心情日记" }; if (表.TableName == "文摘") 重组表列 = new string[] { "总类", "别类", "子类", "标题", "内容" }; List<TreeNode> 子节 = new List<TreeNode>(), 节存 = new List<TreeNode>(); int 列数 = 重组表列.Length; 树表 = 表.DefaultView.ToTable(true, 重组表列); /*玄龙戏珠无级树=>开始*/ foreach (DataRow 数据列 in 树表.Rows) { bool 节控 = false; for (int 级 = 0; 级 != 列数; 级++) { string 节路径 = ""; if (树.Nodes.Count == 0) 节控 = true; for (int 数 = 0; 数 <= 级; 数++) { if (节路径 == "") 节路径 = 数据列[数].ToString(); else 节路径 += "\\" + 数据列[数].ToString(); } if (级 < 列数 - 1) foreach (TreeNode 节数据 in 节存) { if (节路径 == 节数据.FullPath) { 子节[级] = 节数据; 节控 = false; break; } else 节控 = true; } else 节控 = true; if (节控 && 级 == 0) { TreeNode 节点 = new TreeNode(); 子节.Add(节点); 节点.Tag = 数据列; 节点.Text = 数据列[0].ToString(); 节点.ImageIndex = 3; 节点.SelectedImageIndex = 2; 节存.Add(节点); 子节[级] = 节点; 树.Nodes.Add(节点); } if (级 > 0 && 节控) { TreeNode 加子节 = new TreeNode(); 子节.Add(加子节); 加子节.Tag = 数据列; 加子节.Text = 数据列[级].ToString(); 加子节.ImageIndex = 4; 加子节.SelectedImageIndex = 5; if (级 < 列数 - 1) 节存.AddRange(子节); 子节[级] = 加子节; 子节[级 - 1].Nodes.Add(加子节); } if (级 < 列数 - 1) { 节存 = 节存.Distinct().ToList(); 节存 = 节存.Where(筛选 => 筛选.Level < 列数 - 1).ToList(); } } } })); }
private DataTable 测试九九表树() { /*创建测试九九表、设置表名、列名*/ DataTable 测试九九表 = new DataTable(); 测试九九表.TableName = "测试树表"; 测试九九表.Columns.Add("九九表"); for (int 表头序 = 1; 表头序 <= 9; 表头序++) { 测试九九表.Columns.Add(表头序.ToString()); } /*添加行数据*/ for (int i = 1; i <= 9; i++) { DataRow 测试树表列 = 测试九九表.NewRow(); 测试树表列[0] = "九九表"; for (int j = 1; j <= 9; j++) { 测试树表列[j] = i.ToString() + "×" + j.ToString() + "=" + (i * j).ToString(); } 测试九九表.Rows.Add(测试树表列); } return 测试九九表; }
- 全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结
- 网友做的android无级树(多级树)控件工程(含源代码)
- 不用递归无级树
- Android自定义View全面总结
- Android自定义View全面总结
- 根据点击树节点筛选bindingSource数据到DataGridView显示,结合玄龙戏珠无级树
- [转]生成无级树(sql函数)
- [转]生成无级树(sql函数)
- 生成无级树 (由存储过程出来)
- java递归无级树输出json格式
- iphone 应用程序图标、启动画面、itune图标等设置全面总结
- 工厂三兄弟之抽象工厂模式(五):抽象工厂模式总结
- 完美截取Office2003图标
- 完美隐藏系统托盘图标
- 认识显存的五“兄弟”
- 自定义图标
- 自定义控件开发流程全面总结(有源码)
- Android Material Design全面总结(CoordinatorLayout+AppBarLayoout+CollapsingToolbarLayout+自定义behavior)
- 应用工具的使用经验积累
- webkit js扩展 指名idl的位置是WebCore下面的两个文件
- Android环境搭建——安装ADT时出现Duplicate Location错误
- C---数据类型
- A - Millennium&&http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=9661#problem/A
- 全面:玄龙戏珠无级树(五莲花姊妹兄弟完美自定义含图标)总结
- Apache的winnt_accept: Asynchronous AcceptEx failed问题
- android开发横竖屏切换
- - Recurring Decimals&&http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=9661#problem/B
- SQL Server 用触发器生成格式化单号的例子
- vimrc 语法
- Tomcat修改service.xml性能调优 增加最大并发连接数
- POJ1083-Moving Tables解题报告
- IO - 同步,异步,阻塞,非阻塞