winform层级树的数据 递归方法加载

层级树数据加载,

使用方式 递归加载数据 ,不限级,

数据来源 本地文件

涉及范围 文件读取,数据类型转换,数据绑定

效果图 

数据格式: 0是一级目录,箭头表示层级关联关系  数据文件存放在 运行程序根目录 下 的Data目录下

数据源 文件名'data.txt' 存放在exe程序目录下的Data目录下

s3a1-h1jw-42e4-2ksa-243-fw4,张三,0
s3a1-h1jw-42e4-2ksa-243-fw42,张三2,s3a1-h1jw-42e4-2ksa-243-fw4
s3a1-h1jw-42e4-2ksa-2wz43-fw42,张三3,s3a1-h1jw-42e4-2ksa-243-fw42
s3a1-h1jw-42e4-2ksa-2wdz43-fw42,张三4,s3a1-h1jw-42e4-2ksa-2wz43-fw42
s3a1-h1jw-42e4-2ksa-243-fw42,张三1,0
s3a1-h1jw-42e4-2ksa-243-fw4sf2,张三1,s3a1-h1jw-42e4-2ksa-243-fw42
s3a1-h1jw-42e4-2ksa-243-fw43,张三2,0
s3a1-h1jw-42e4-2ksa-243-fw44,张三3,0
s3a1-h1jw-42e4-2k3sa-243-fw54,张三4,0
s3a1-h1jw-42e4-2k5sa-243-fw4,张三5,0
s3a1-h1jw-42e4-24ksa-243-fw4,张三6,0
s3a1-h1jw-42e4-2kdsa-243-fw4,张三77,0
s3a1-h1jw-42e4-2ksdda-243-fw4,张三4,0
s3a1-h1jw-42e4-2kdsa-s243-fw4,张三34,0
s3a1-h1jw-42e4-2kfsa-243-fw4,张5三,0
s3a1-h1jw-42e4-2ksa-2a43-fw4,张三24,0
s3a1-h1jw-42e4-2bksa-243-fw4,张54三,0
s3a1-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























猜你喜欢

转载自blog.csdn.net/qq_28254093/article/details/78332634