code   fcode
2       1
3       2
4       2
5       3
7       5
当我选择了第一条记录时,怎么把它的节点全部删除

解决方案 »

  1.   

    数据库是什么?SQL的话有点麻烦,oracle的话很好办
      

  2.   

    oracle:
    Delete from t1 where code in (SELECT code from t1 START WITH t1.code = 2 CONNECT BY PRIOR t1.code = t1.fcode)
      

  3.   

    但是SQL中没有这样的语法,所以只好自己去做一个树的遍历了,用存储过程也可以,用代码生成SQL也可以
      

  4.   

    给你一个通过递归删除树形节点的例子:供参考://通过递归删除所选组织及其所有下级组织的信息
    private void DelSelOrgAndAllChildren(TreeNode nodSelected)
    {
    if(nodSelected.Nodes.Count > 0)
    {
    foreach(TreeNode nodChild in nodSelected.Nodes)
    {
    //递归调用删除所有的下级组织信息
    DelSelOrgAndAllChildren(nodChild);
    }
    }
    strSql = "Delete T_Organization Where F_OrgID = '" + nodSelected.ID.Trim() + "'";
    try
    {
    string strOrgID = nodSelected.ID.Trim(); cmdDB = new SqlCommand(strSql,connDB);
    cmdDB.Transaction = tran;
    cmdDB.ExecuteNonQuery(); string sSqlP = "Delete T_AIU Where F_OrgID = '" + strOrgID + "'";
    SqlCommand cmdP = new SqlCommand(sSqlP,connDB);
    cmdP.Transaction = tran;
    cmdP.ExecuteNonQuery();
    }
    catch
    {
    intErr = 1;
    }
    }
    private void lbtDelTop_Command(object sender, System.Web.UI.WebControls.CommandEventArgs e)
    {
    if(e.CommandName == "DelTop" || e.CommandName == "DelBottom")
    {
    if(tvwOrg.Nodes.Count == 0)
    {
    return;
    }
    else
    {
    TreeNode nodSel = tvwOrg.GetNodeFromIndex(tvwOrg.SelectedNodeIndex); string sConn = ConfigurationSettings.AppSettings["NCMT"];
    connDB = new SqlConnection(sConn); connDB.Open();
    tran = connDB.BeginTransaction(); DelSelOrgAndAllChildren(nodSel); if(intErr != 1)
    {
    //提交事务
    tran.Commit();

    //刷新组织树形图
    Response.Write("<script language=javascript>parent.OrgTree.location.href='OrgTree.aspx'</script>");
    }
    else
    {
    //回滚事务
    tran.Rollback();
    intErr = 0;
    } connDB.Close();
    }
    }
    }