winform层级树的数据 递归方法加载
来源:互联网 发布:图片相似度比较算法 编辑:程序博客网 时间:2024/05/20 21:22
层级树数据加载,
使用方式 递归加载数据 ,不限级,
数据来源 本地文件
涉及范围 文件读取,数据类型转换,数据绑定
效果图
数据格式: 0是一级目录,箭头表示层级关联关系 数据文件存放在 运行程序根目录 下 的Data目录下
数据源 文件名'data.txt' 存放在exe程序目录下的Data目录下
s3a1-h1jw-42e4-2ksa-243-fw4,张三,0s3a1-h1jw-42e4-2ksa-243-fw42,张三2,s3a1-h1jw-42e4-2ksa-243-fw4s3a1-h1jw-42e4-2ksa-2wz43-fw42,张三3,s3a1-h1jw-42e4-2ksa-243-fw42s3a1-h1jw-42e4-2ksa-2wdz43-fw42,张三4,s3a1-h1jw-42e4-2ksa-2wz43-fw42s3a1-h1jw-42e4-2ksa-243-fw42,张三1,0s3a1-h1jw-42e4-2ksa-243-fw4sf2,张三1,s3a1-h1jw-42e4-2ksa-243-fw42s3a1-h1jw-42e4-2ksa-243-fw43,张三2,0s3a1-h1jw-42e4-2ksa-243-fw44,张三3,0s3a1-h1jw-42e4-2k3sa-243-fw54,张三4,0s3a1-h1jw-42e4-2k5sa-243-fw4,张三5,0s3a1-h1jw-42e4-24ksa-243-fw4,张三6,0s3a1-h1jw-42e4-2kdsa-243-fw4,张三77,0s3a1-h1jw-42e4-2ksdda-243-fw4,张三4,0s3a1-h1jw-42e4-2kdsa-s243-fw4,张三34,0s3a1-h1jw-42e4-2kfsa-243-fw4,张5三,0s3a1-h1jw-42e4-2ksa-2a43-fw4,张三24,0s3a1-h1jw-42e4-2bksa-243-fw4,张54三,0s3a1-h1jw-42e4-2ksvca-243-fw4,张55三,0
文件读取类 FileTools.cs
using System;using System.Data;using System.IO;using System.Text;using System.Windows.Forms;using DevexpressExtendUnits;namespace 权限树.Tools{ /// <summary> /// 描述 文件读写 /// </summary> public class FileTools { public static string FilePath = @"\Datas\Datas.txt"; /// <summary> /// 读取文件呢 /// </summary> /// <returns></returns> public static string[] Get() { var filePath = Application.StartupPath + @FilePath; if (FileIsExists(filePath) == false) { return null; } try { return File.ReadAllLines(filePath, Encoding.UTF8); } catch (Exception ex) { return null; } } public static void AppendText(string text) { var filePath = Application.StartupPath + @FilePath; if (FileIsExists(filePath) == false) { return; } var fs = new FileStream(filePath, FileMode.Open); var sw = new StreamWriter(fs, Encoding.UTF8); //开始写入 sw.WriteLine(text); //清空缓冲区 sw.Flush(); //关闭流 sw.Close(); fs.Close(); } /// <summary> /// 判断文件是否存在 /// </summary> /// <param name="filePath"></param> /// <returns></returns> public static bool FileIsExists(string filePath) { if (File.Exists(filePath)) return true; MessageBox.Show(filePath + "\n文件丢失"); return false; } /// <summary> /// string 数组转DataTable /// </summary> /// <returns></returns> public static DataTable ParamToDataTable(string[] str,string split=",") { if (str.Length <= 0) { return null; } DataTable dt=new DataTable(); for (var j = 0; j < str.Length; j++) { var st = str[j].Split(','); for (var i = 0; i < st.Length; i++) { if (j == 0) {//添加列 dt.Columns.Add("column"+i,Type.GetType("System.String")); } if (i == 0) { dt.Rows.Add(); } dt.Rows[j][i] = st[i]; } } return dt; } }}
层级树窗口 Home
窗口控件有: Button 按钮 目的:点击加载数据
Treeview 目的:显示数据
代码
using System;using System.Data;using System.Windows.Forms;using 权限树.Tools;namespace 权限树{ public partial class Home : Form { public Home() { InitializeComponent(); } //读取文件数据 private void button1_Click(object sender, EventArgs e) { var jsons = FileTools.Get(); var dt = FileTools.ParamToDataTable(jsons); var first = dt.Select("column2='0'"); AddNodes(treeView1.Nodes, dt, "0", "column2", 0); } /// <summary> /// 添加节点 /// </summary> /// <param name="nodes">Nodes对象</param> /// <param name="dt">数据源</param> /// <param name="parentId">关联ID</param> /// <param name="parentName">关联查询列的名称</param> /// <param name="parentIndex">关联值得下标</param> /// <param name="keyIndex">绑定数据 key的下标</param> /// <param name="valueIndex">绑定数据 value 的下标</param> public void AddNodes(TreeNodeCollection nodes, DataTable dt, string parentId, string parentName, int parentIndex, int keyIndex = 0, int valueIndex = 1) { var first = dt.Select(parentName + "='" + parentId + "'"); if (first.Length <= 0) { return; } for (var i = 0; i < first.Length; i++) { var firstRow = first[i]; nodes.Add(firstRow[keyIndex].ToString(), firstRow[valueIndex].ToString(), ""); var parentIds = firstRow[parentIndex].ToString(); var node = nodes[i].Nodes; AddNodes(node, dt, parentIds, parentName, parentIndex); } } /// <summary> /// 添加节点 /// </summary> /// <param name="nodes">Nodes对象</param> /// <param name="dt">数据源</param> /// <param name="parentId">关联ID</param> /// <param name="parentName">关联查询列的名称</param> /// <param name="parentIndexName">关联值得下标列名称</param> /// <param name="keyIndexName">绑定数据 key的下标名称</param> /// <param name="valueIndexName">绑定数据 value 的下标名称</param> public void AddNodes(TreeNodeCollection nodes, DataTable dt, string parentId, string parentName, string parentIndexName, string keyIndexName = "column0", string valueIndexName = "column1") { var first = dt.Select(parentName + "='" + parentId + "'"); if (first.Length <= 0) { return; } for (var i = 0; i < first.Length; i++) { var firstRow = first[i]; nodes.Add(firstRow[keyIndexName].ToString(), firstRow[valueIndexName].ToString(), ""); var parentIds = firstRow[parentIndexName].ToString(); var node = nodes[i].Nodes; AddNodes(node, dt, parentIds, parentName, parentIndexName); } } }}有没有觉着,两个方法的参数太多,当然最初的样子只有3个参数, 后面为了改成工具 方法,添加了许多参数,如果实在觉得参数太多,一下是参数少的方法
少参数方法代码 Home.cs 清楚参数关系
using System;using System.Data;using System.Windows.Forms;using 权限树.Tools;namespace 权限树{ public partial class Home : Form { public Home() { InitializeComponent(); } //读取文件数据 private void button1_Click(object sender, EventArgs e) { var jsons = FileTools.Get(); var dt = FileTools.ParamToDataTable(jsons); var first = dt.Select("column2='0'"); AddNodes(treeView1.Nodes, dt, "0"); } /// <summary> /// 添加节点 /// </summary> /// <param name="nodes">Nodes对象</param> /// <param name="dt">数据源</param> /// <param name="parentId">关联ID</param> public void AddNodes(TreeNodeCollection nodes, DataTable dt, string parentId) { var first = dt.Select("column2='" + parentId + "'"); if (first.Length <= 0) { return; } for (var i = 0; i < first.Length; i++) { var firstRow = first[i]; nodes.Add(firstRow[0].ToString(), firstRow[1].ToString(), ""); var parentIds = firstRow[0].ToString(); var node = nodes[i].Nodes; AddNodes(node, dt, parentIds); } } }}
实例代码 点击打开链接 http://download.csdn.net/download/qq_28254093/10038088
阅读全文
0 0
- winform层级树的数据 递归方法加载
- c# winform treeview 递归加载数据库数据
- javascript 层级数据的递归遍历与节点插入
- 将json格式的无层级菜单数据转换成层级菜单数据的方法
- ASP递归层级表格数据展示
- 不用递归获取树节点的所有层级子节点
- WinForm下CLR加载Assembly的方法
- 递归查找当前对象所属的层级
- 递归遍历View的层级结构
- 用户层级递归查询的笔记
- 层级关系的数据展示
- 数据分析师的层级
- treeview 加载数据的递归代码
- 利用递归形成一个层级树
- 不用递归,C#实现无限层级树
- 实现按名称递归查找控件的方法WinForm
- WinForm窗体之间数据传递的方法
- Json List数据递归转换成层级Json
- [c进阶01]keil mdk编译器,字符串存储在数组方式,占用内存情况
- Android8.0 Settings provider 数据库 新方法
- opencv鼠标事件1
- 组合索引和单值索引使用时的注意点
- unity个人记录
- winform层级树的数据 递归方法加载
- Google公布OpenFermion:量子计算机的开源软件包
- 数据结构第五版第二章实验2.实现单链表的各种基本运算
- 原理图编译出现Has no driving source 啥意思?
- Doker ELK 的安装部署使用教程
- 1019. 数字黑洞 (20)
- 10.24考试爆炸记
- Linux下的开发经验总结
- java 泛型 之自定义泛型类