WINFORM两个树结构的绘制。
支持路径方式和数据表结构方式。
如果是在WEBFROM下修改响应的控件名。
调用
List<string> Test =new List<string>();
Test.Add(@"C:/");
Test.Add(@"C:/Temp");
Test.Add(@"C:/Temp/A");
GetTree(TreeView1, Test , '//');
- #region 数据树结构
- /// <summary>
- /// 绘制树
- /// </summary>
- /// <param name="Tv">树控件</param>
- /// <param name="Ds">数据DATASET</param>
- /// <param name="Tagindex">主键INDEX</param>
- /// <param name="Textindex">文本的INDEX</param>
- /// <param name="Parentindex">父目录的INDEX</param>
- /// <param name="ParentStar">父的条件</param>
- public static void GetTree(TreeView MyTreeView,DataTable MyDataTable,int Tagindex,int Textindex,int Parentindex,string ParentStar)
- {
- string ParentText = MyDataTable.Columns[Parentindex].ColumnName;
- DataRow[] T = MyDataTable.Select(ParentText +"='" + ParentStar+"'");
- for (int i = 0; i != T.Length; i++)
- {
- TreeNode Tn = new TreeNode();
- Tn.Text = T[i][Textindex].ToString();
- Tn.Tag = T[i][Tagindex].ToString();
- MyTreeView.Nodes.Add(Tn);
- LoadNode(Tn, MyDataTable, ParentText, Tagindex, Textindex);
- }
- }
- /// <summary>
- /// 树的根
- /// </summary>
- /// <param name="tn">上级目录</param>
- /// <param name="ds">数据DATASET</param>
- /// <param name="ParentText">目录名称</param>
- /// <param name="Tagindex">主键ID</param>
- /// <param name="Textindex">名称的主键</param>
- private static void LoadNode(TreeNode Tn, DataTable MyDataTable, string ParentText, int Tagindex, int Textindex)
- {
- DataRow[] T = MyDataTable.Select(ParentText + "='" + Tn.Tag.ToString() + "'");
- for (int i = 0; i != T.Length; i++)
- {
- TreeNode treeN = new TreeNode();
- treeN.Tag = T[i][Tagindex].ToString();
- treeN.Text = T[i][Textindex].ToString();
- Tn.Nodes.Add(treeN);
- LoadNode(treeN, MyDataTable, ParentText, Tagindex, Textindex);
- }
- }
- #endregion
- #region 目录树结构
- /// <summary>
- /// 绘制树
- /// </summary>
- /// <param name="MyTreeView">数控件</param>
- /// <param name="PathList">数据列表 "a,b,c" "b,b,c" "a,b,d"</param>
- /// <param name="SplitChar">分割符号</param>
- public static void GetTree(TreeView MyTreeView, IList<string> PathList, char SplitChar)
- {
- for (int i = 0; i != PathList.Count; i++)
- {
- int Index = 1;
- IList<string> _TempNode = PathList[i].Split(SplitChar);
- if (_TempNode[0].Trim().Length != 0)
- {
- string NodeID = _TempNode[0];
- if (MyTreeView.Nodes[NodeID] == null)
- {
- MyTreeView.Nodes.Add(NodeID, _TempNode[0]);
- AddNode(MyTreeView.Nodes[NodeID], _TempNode, ref Index);
- }
- else
- {
- AddNode(MyTreeView.Nodes[NodeID], _TempNode, ref Index);
- }
- }
- }
- }
- /// <summary>
- /// 树的根
- /// </summary>
- /// <param name="Tn">上级目录</param>
- /// <param name="_TempNode">数据</param>
- /// <param name="Index">目前索引</param>
- private static void AddNode(TreeNode Tn, IList<string> PathList, ref int Index)
- {
- if (Index > PathList.Count - 1) return;
- if (PathList[Index].Trim().Length == 0)
- {
- Index++;
- if (Index > PathList.Count - 1) return;
- }
- string NodeID = PathList[Index];
- if (Tn.Nodes[NodeID] == null)
- {
- Tn.Nodes.Add(NodeID, PathList[Index]);
- Index++;
- AddNode(Tn.Nodes[NodeID], PathList, ref Index);
- }
- else
- {
- Index++;
- AddNode(Tn.Nodes[NodeID], PathList, ref Index);
- }
- }
- #endregion