我sql数据库中有个存储着一个树结构,如表A(id,full,title)
id 为编号,full为树的节点,title为节点的名称。如果第1条数据full字段数据为2位,就为树的一个节点。第2条数据4位,前2位字符=第1条数据,那么第2条数据就是第1条数据的子节点。以此类推!full数据绝对唯一!例子如下:A表
id full title
1 ** 科目
2 **22 数学
3 **33 语文
4 **3399 几何
5 aa 成绩
6 aabb 成绩1
树就如下:
科目
数学
语文
几何
成绩
成绩1请问怎么动态添加TreeView,希望大家帮我搞定这棵树。我是不会啊!!
id 为编号,full为树的节点,title为节点的名称。如果第1条数据full字段数据为2位,就为树的一个节点。第2条数据4位,前2位字符=第1条数据,那么第2条数据就是第1条数据的子节点。以此类推!full数据绝对唯一!例子如下:A表
id full title
1 ** 科目
2 **22 数学
3 **33 语文
4 **3399 几何
5 aa 成绩
6 aabb 成绩1
树就如下:
科目
数学
语文
几何
成绩
成绩1请问怎么动态添加TreeView,希望大家帮我搞定这棵树。我是不会啊!!
也可以用非递归,详细自己看
http://dev.csdn.net/author/shadowsky/231d27652a414acba8e0e03260ad4339.html
代码太长,随便贴点。//函数递归调用加载树,
//-------------在窗体初始化时,根据数据库中的记录创建树形图----------------
private void SetOrgInfo_Load(object sender, System.EventArgs e)
{
this.bdbomnode_sqlDataAdapter1.Fill(tblSetOrgInfo);//读入数据
//sqlgood.SetOrgInfo.bdbomnoderecInfoSqlDataAdapter1.Fill(bdbomnoderecInfo);
DataTable tempDataTable = tblSetOrgInfo.Copy();//将组织机构表另存一份为tempDataTable
DataView viewSetOrgInfo = new DataView(tempDataTable);//新建一个数据视图
viewSetOrgInfo.RowFilter = "ItemLevel = 0";
//将数据集中的所有记录逐个根据他们之间的关系添加到树形表中去
if (viewSetOrgInfo.Count > 0)
{
foreach (DataRowView myRow in viewSetOrgInfo)
{
string strEnterpriseName = myRow["节点名称"].ToString().Trim();
//此处是添加第一个节点“省医药集团”
this.treeView1.Nodes.Add(new TreeNode(strEnterpriseName));
//此处初始化参数是第一个节点“省医药集团”,然后该函数会递归添加所有子节点
PopulateTreeView(strEnterpriseName,treeView1.Nodes[0],myRow);
treeView1.SelectedNode = treeView1.Nodes[0]; //选中第一个节点
}
} }
//---------------根据输入的节点信息,递归调用最终添加所有的节点-----------------------
private void PopulateTreeView(string parentPart,TreeNode parentNode,DataRowView parentRow)
{
string strEnterpriseName = "";
DataTable tempDataTable = tblSetOrgInfo.Copy();
DataView viewSetOrgInfo = new DataView(tempDataTable);
//筛选获得当前传递过来的节点的子项,并将其添加到树形图中
//判断方法是凡parentIndex等于传递过来的节点的absIndex的,就是该节点的子项
viewSetOrgInfo.RowFilter = "ParentIndex = '" + parentRow["AbsIndex"].ToString().Trim() + "'";
//递归的添加每一个节点的所有子节点
foreach (DataRowView myRow in viewSetOrgInfo)
{
strEnterpriseName = myRow["节点名称"].ToString().Trim();
TreeNode myNode = new TreeNode(strEnterpriseName);
parentNode.Nodes.Add(myNode);
if (myRow["节点还是文件"].ToString().Trim() == "0" )
//myNode.ImageIndex=3;
{
myNode.ForeColor=Color.Blue;
}
if (myRow["节点还是文件"].ToString().Trim() == "3" )
//myNode.ImageIndex=3;
{
myNode.ForeColor=Color.Green;
}
//函数递归调用,将所有节点按顺序添加完毕
PopulateTreeView(strEnterpriseName,myNode,myRow);
}
}