文件资料递归加载:
private void frmMain_Load(object sender, EventArgs e)
{
string demopath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "deom");//所有文件的根目录
LoadData(demopath, treeView1.Nodes);
}
//递归方法
private void LoadData(string paths, TreeNodeCollection nodes)//跟目录路径和控件根节点
{
string[] dnames=Directory.GetDirectories(paths);//获取当前目录下的所有子目录(路径和名称)
foreach (var item in dnames)
{
//添加根节点
TreeNode IndexNode = nodes.Add(Path.GetFileName(item));
LoadData(item, IndexNode.Nodes);//递归调用
}
//最后一个子目录下面没有了就会执行读取txt文件,读取完毕以后,上一级子目录也就是执行完毕LoadData()方法,然后继续执行读取TXT文件(最终都会执行)
//读取文本文件(只对于当前路径信息的文本文件)
string[] txts=Directory.GetFiles(paths, "*.txt");//(返回txt文件名称和路径)
foreach (var item in txts)
{
TreeNode txtnode=nodes.Add(Path.GetFileName(item));
//因为后面双击要打开文本文件所以要记住各个路径信息】
txtnode.Tag = item;//将当前TXT文件的路径保存至节点的Tag属性中
}
}
数据库资料递归加载实例:
private void Form1_Load(object sender, EventArgs e)
{
NewMethod();
}
public void NewMethod()//封装窗口加载方法,通过委托传到子窗体
{
treeView1.Nodes.Clear();//传过去之前先清理所有节点集合
LoadDataToTree(-1, treeView1.Nodes);//根节点
}
private void LoadDataToTree(int pid, TreeNodeCollection nodes)//根节点
{
//遍历一级节点数据
List<Category> list = GetDataByParentID(pid);
foreach (var item in list)
{
TreeNode nods = nodes.Add(item.TName);//将当前对象添加至根节点,并创建节点 用于添加当前一级节点的子节点
nods.Tag = item.Tid;//获取当前节点的ID,并保存至nods节点对象
LoadDataToTree(item.Tid, nods.Nodes);//重新调用当前方法,获取当前对象的子节点 tid=1
}
}
//查询一级节点
private List<Category> GetDataByParentID(int pid)
{
List<Category> ulist = new List<Category>();
string sql = "SELECT TId,tName FROM Category WHERE tparentId=@PID";
SqlParameter[] pms = { new SqlParameter("@PID", SqlDbType.Int) { Value = pid } };
using (SqlDataReader reader = SqlHelper.Reader(sql, CommandType.Text, pms))
{
if (reader.HasRows)
{
while (reader.Read())
{
Category u = new Category();
u.Tid = reader.GetInt32(0);
u.TName = reader.GetString(1);
ulist.Add(u);
}
}
}
return ulist;
}
来源:CSDN
作者:.Selected
链接:https://blog.csdn.net/MrLsss/article/details/104228583