您的位置:首页 > 其它

WinForm 树结构的绘制与数据表的映射

2011-07-14 16:40 288 查看
源:WinForm 树结构的绘制与数据表的映射
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: