怎么样用递归的方法生成这个树
string strSelectMission = @"select * from SBFL where XLFL = '0' and ISNEW = '1'"; DataTable SBFL = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nrrow in SBFL.Rows)
{
TreeNode NRnode = new TreeNode();
NRnode.Text = nrrow["FLNAME"].ToString();
NRnode.Tag = nrrow["FLID"].ToString(); strSelectMission = @"select * from SBFL where XLFL = '" + NRnode.Tag + "'";
DataTable QXNRTwo = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nr2row in QXNRTwo.Rows)
{
TreeNode NR2node = new TreeNode();
NR2node.Text = nr2row["FLNAME"].ToString();
NR2node.Tag = nr2row["FLID"].ToString();
strSelectMission = @"select * from SBFL where XLFL = '" + NR2node.Tag + "'";
DataTable QXNRThree = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nr3row in QXNRThree.Rows)
{
TreeNode NR3node = new TreeNode();
NR3node.Text = nr3row["FLNAME"].ToString();
NR3node.Tag = nr3row["FLID"].ToString();
NR2node.Nodes.Add(NR3node);
}
NRnode.Nodes.Add(NR2node);
} SBFLTree.Nodes.Add(NRnode);
}
只对数据库进行一次查询?
string strSelectMission = @"select * from SBFL where XLFL = '0' and ISNEW = '1'"; DataTable SBFL = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nrrow in SBFL.Rows)
{
TreeNode NRnode = new TreeNode();
NRnode.Text = nrrow["FLNAME"].ToString();
NRnode.Tag = nrrow["FLID"].ToString(); strSelectMission = @"select * from SBFL where XLFL = '" + NRnode.Tag + "'";
DataTable QXNRTwo = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nr2row in QXNRTwo.Rows)
{
TreeNode NR2node = new TreeNode();
NR2node.Text = nr2row["FLNAME"].ToString();
NR2node.Tag = nr2row["FLID"].ToString();
strSelectMission = @"select * from SBFL where XLFL = '" + NR2node.Tag + "'";
DataTable QXNRThree = helper.ExcuteDataSet(strSelectMission).Tables[0];
foreach (DataRow nr3row in QXNRThree.Rows)
{
TreeNode NR3node = new TreeNode();
NR3node.Text = nr3row["FLNAME"].ToString();
NR3node.Tag = nr3row["FLID"].ToString();
NR2node.Nodes.Add(NR3node);
}
NRnode.Nodes.Add(NR2node);
} SBFLTree.Nodes.Add(NRnode);
}
只对数据库进行一次查询?
{
//ID,ParentID根据表设计定
string strSelectMission = @"select *, ID,ParentID from SBFL"; DataTable SBFL = helper.ExcuteDataSet(strSelectMission).Tables[0]; DataRow[] rootRows = SBFL.Select("ParentID is NULL"); foreach (DataRow nrrow in rootRows)
{
TreeNode NRnode = new TreeNode();
NRnode.Text = nrrow["FLNAME"].ToString();
NRnode.Tag = nrrow["FLID"].ToString();
AddChildren(NRnode, SBFL, nrrow["ID"].ToString()); SBFLTree.Nodes.Add(NRnode);
}
}
public void AddChildren(TreeNode node, DataTable treeTable, String parentNodeId)
{
DataRow[] drs = treeTable.Select("ParentID='" + parentNodeId + "'");
foreach (DataRow chr in drs)
{
TreeNode NR3node = new TreeNode();
NR3node.Text = chr["FLNAME"].ToString();
NR3node.Tag = chr["FLID"].ToString();
node.Nodes.Add(NR3node); AddChildren(NR3node, treeTable, chr["ID"].ToString());//递归调用
}
}
然后遍历哈希表:
如果节点的“父节点标识”为空,则此节点直接添加到树控件下(母节点)
如果节点的“父节点标识”有值,则从哈希表中用该标识索引到父节点,把此节点添加到父节点的Nodes里整个过程只需要一次查询数据库,和一个foreach循环即可