private void FillTree(int count)
{
//检查count是否与表的行数相等,
//不相等---继续递归调用
//相等-----中止调用
if (count == ds1.Tables[0].Rows.Count) {}
TreeNode trNode = new TreeNode();
TreeNode tpNode = new TreeNode();
//判断count是否与当前表的行数相等,若不相等则继续递归调用
if (count != ds1.Tables[0].Rows.Count)
{
//检查当前count行的节点是不是已经存在于tree.nodes中
//存在----count++;filltree(count);
//不存在--添加新节点
for (int j=0; j< tvRoot.Nodes.Count; j++)
{
//节点存在,添加下一个节点
if (ds1.Tables[0].Rows[count]["department_code"].ToString() == tvRoot.Nodes[j].ID.ToString())
{
count++;
FillTree(count);
}
}
//节点不存在,先添加count的父节点,再添加count结点
//如果count的father_code为空,count节点添加到根结点
string sql3 = "select * from Com. TC_PUB_DICT_DEPARTMENT where department_code = '" + ds1.Tables[0].Rows[count]["father_code"].ToString() + "'";
if (work.Public.ExecuteSql(sql3)==0)
{
trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
tvRoot.Nodes.AddAt(0,trNode);
count++;
FillTree(count);
}
//如果count的father_code不为空,先添加父节点
if(work.Public.ExecuteSql(sql3)!=0)
{
DataSet ds3 = work.Public.GetRecordSet(sql3);
for (int n=0; n<tvRoot.Nodes.Count; n++)
{
//count的父节点存在
if(ds3.Tables[0].Rows[0]["department_code"].ToString() == tvRoot.Nodes[n].ID.ToString())
{
//在这个节点下添加count行为子结点
trNode.Text = trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
tvRoot.Nodes[n].Nodes.AddAt(tvRoot.Nodes.IndexOf(tvRoot.Nodes[n]),trNode);
count++;
FillTree(count);
}
}
//count的父节点不存在,先添加父节点,再添加count节点
tpNode.ID = ds3.Tables[0].Rows[0]["department_code"].ToString();
tpNode.Text = ds3.Tables[0].Rows[0]["department"].ToString();
tvRoot.Nodes.AddAt(0,tpNode);
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
tpNode.Nodes.AddAt(tpNode.Nodes.IndexOf(tpNode),trNode);
count++;
FillTree(count);
}
}
}
{
//检查count是否与表的行数相等,
//不相等---继续递归调用
//相等-----中止调用
if (count == ds1.Tables[0].Rows.Count) {}
TreeNode trNode = new TreeNode();
TreeNode tpNode = new TreeNode();
//判断count是否与当前表的行数相等,若不相等则继续递归调用
if (count != ds1.Tables[0].Rows.Count)
{
//检查当前count行的节点是不是已经存在于tree.nodes中
//存在----count++;filltree(count);
//不存在--添加新节点
for (int j=0; j< tvRoot.Nodes.Count; j++)
{
//节点存在,添加下一个节点
if (ds1.Tables[0].Rows[count]["department_code"].ToString() == tvRoot.Nodes[j].ID.ToString())
{
count++;
FillTree(count);
}
}
//节点不存在,先添加count的父节点,再添加count结点
//如果count的father_code为空,count节点添加到根结点
string sql3 = "select * from Com. TC_PUB_DICT_DEPARTMENT where department_code = '" + ds1.Tables[0].Rows[count]["father_code"].ToString() + "'";
if (work.Public.ExecuteSql(sql3)==0)
{
trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
tvRoot.Nodes.AddAt(0,trNode);
count++;
FillTree(count);
}
//如果count的father_code不为空,先添加父节点
if(work.Public.ExecuteSql(sql3)!=0)
{
DataSet ds3 = work.Public.GetRecordSet(sql3);
for (int n=0; n<tvRoot.Nodes.Count; n++)
{
//count的父节点存在
if(ds3.Tables[0].Rows[0]["department_code"].ToString() == tvRoot.Nodes[n].ID.ToString())
{
//在这个节点下添加count行为子结点
trNode.Text = trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
tvRoot.Nodes[n].Nodes.AddAt(tvRoot.Nodes.IndexOf(tvRoot.Nodes[n]),trNode);
count++;
FillTree(count);
}
}
//count的父节点不存在,先添加父节点,再添加count节点
tpNode.ID = ds3.Tables[0].Rows[0]["department_code"].ToString();
tpNode.Text = ds3.Tables[0].Rows[0]["department"].ToString();
tvRoot.Nodes.AddAt(0,tpNode);
trNode.ID = ds1.Tables[0].Rows[count]["department_code"].ToString();
trNode.Text = ds1.Tables[0].Rows[count]["department"].ToString();
tpNode.Nodes.AddAt(tpNode.Nodes.IndexOf(tpNode),trNode);
count++;
FillTree(count);
}
}
}
解决方案 »
- xml转化为json,谢谢
- 像QQ修改昵称和头像一样:子窗体修改父窗体立即更新!
- 高分求!vs2010 C# Entity Framework 怎么使用Oracle 10g数据库啊!
- 高手帮忙啊,局域网版五子棋2人对战
- 关于 辅助排课管理系统
- 联想 IdeaPad S10 散热怎么样?能不能装VS2008
- 请教,如何在内网中实现类似google地图应用
- 请问大家我怎么在DataGrid中,每行之间加一条线,谢谢。
- 毕设中的一个问题:C#中如何创建一个网页,并打开,用于报告程序运行结果。急!
- C# 如何转换C++里的 BOOL *
- RemoveChars
- winform中的dataGridView控件如何去掉最左边的那个空列
1 aa 8
2 bb 8
3 cc 6
4 dd 5
5 rr 4
6 hh 8
7 ww 1
8 we null
{
读取儿子(老爹);
...
if(没有儿子了)老爹.Add(数据);else
绑儿子(儿子,数据);}
/// 动态生成树
/// </summary>
/// <param name="sMenuStrip"></param>
public void eBuildTreeView(TreeView sTreeView)
{
try
{
if (sTreeView != null)
{
DataTable dt = fGetTable("Select menuid, menuname, menutext, parentmenuid From systemmenuinfo order by menuid asc"); for (int i = 0; i < dt.Rows.Count; i++)
if (dt.Rows[i]["parentmenuid"].ToString() == "0")
{
TreeNode sMagicNode = new TreeNode();
sMagicNode.Name = dt.Rows[i]["menuname"].ToString();
sMagicNode.Text = dt.Rows[i]["menutext"].ToString();
sMagicNode.Tag = dt.Rows[i]["menuid"].ToString();
sMagicNode.Checked = false;
sTreeView.Nodes.Add(sMagicNode); eCircleSubNodes(sMagicNode);
}
}
}
finally
{
sTreeView.Refresh();
}
} /// <summary>
/// 循环查找子节点
/// </summary>
/// <param name="sMenuItem"></param>
private void eCircleSubNodes(TreeNode sTreeNode)
{
try
{
string sNodeId = fGetFieldValue("Select menuid, menuname From systemmenuinfo Where menuname = '" + sTreeNode.Name + "' order by menuid asc", 0, "menuid");
int HaveChildsCount = fGetTable("Select parentmenuid From systemmenuinfo Where parentmenuid = '" + sNodeId + "' order by menuid asc").Rows.Count;
if (HaveChildsCount > 0)
{
DataTable dt = fGetTable("Select menuid, parentmenuid, menuname, menutext From systemmenuinfo Where parentmenuid = '" + sNodeId + "' order by menuid asc");
for (int j = 0; j < HaveChildsCount; j++)
{
TreeNode sSubNode = new TreeNode(); sSubNode.Name = dt.Rows[j]["menuname"].ToString();
sSubNode.Text = dt.Rows[j]["menutext"].ToString();
sSubNode.Tag = dt.Rows[j]["menuid"].ToString();
sSubNode.Checked = false;
sTreeNode.Nodes.Add(sSubNode); eCircleSubNodes(sSubNode);
}
}
else
return;
}
finally
{
}
}
{
string strSQL = "SELECT MenuID, MenuName, PMenuID FROM SysMenu WHERE IsValid=1";
DataSet ds=SQLHelper.ExecuteSqlGetDataSet(SQLHelper.CONN_STRING,CommandType.Text,strSQL,null);
ViewState["ds"]=ds;
AddTree(0, (TreeNode)null);
}
private void AddTree(int PMenuID,TreeNode pNode)
{
DataSet ds=(DataSet)ViewState["ds"];
DataView dvTree=new DataView(ds.Tables[0]);
dvTree.RowFilter="[PMenuID]=" + PMenuID; foreach(DataRowView Row in dvTree)
{
TreeNode Node=new TreeNode() ;
if(pNode==null)
{
Node.Text=Row["MenuName"].ToString();
TreeMenu.Nodes.Add(Node);
Node.Expanded=true;
Node.CheckBox = true;
AddTree(Int32.Parse(Row["MenuID"].ToString()), Node);
}
else
{
Node.Text=Row["MenuName"].ToString();
pNode.Nodes.Add(Node);
Node.Expanded=true;
Node.CheckBox = true;
AddTree(Int32.Parse(Row["MenuID"].ToString()),Node);
}
}
}