treeview的建立,更新,删除

昨天做了多级栏目用到treeview,用数据库动态填充的.
建树是挺简单的,用递归,只是删除我用了很笨的方法.树节点的删除其实也是应该用递归,判断节点是不是父节点,是的话就删除其下的子节点,树节点的删除用remove就可以了,可是这样的话还没有删掉数据库里数据,重新加载的时候还是原来的,我用了gridview来删除,用details来增加子栏目,看起来实在是笨笨的.
还有在数据库里建了个触发器来删除子节点,这个简单的触发器花了我不少的时间,原因是一个很小的错误一直没有发现,触发器入下:
create trigger nodedel on treetopic
for delete
as
begin
if (select count(*) from treetopic,deleted where  treetopic.pid=deleted.id)>0
   delete treetopic from treetopic,deleted where treetopic.id=deleted.id
end

之前的错误就是在后面的delete 语句里直接delete from,看半天没有发现错误,实在是short~

建树如下:

 private void treebuild()
    {
        string strcon = ConfigurationSettings.AppSettings["cs"];
        SqlConnection cn = new SqlConnection(strcon);
        string sqlstr = "select * from treetopic";
        SqlDataAdapter da = new SqlDataAdapter(sqlstr ,cn );
        DataSet ds = new DataSet();
        da.Fill(ds);
        ds.Relations.Add("rel", ds.Tables[0].Columns["id"], ds.Tables[0].Columns["pid"]);

        foreach (DataRow drow in ds.Tables[0].Rows)
        {
            if (drow.IsNull("pid"))
            {
                TreeNode tn = createnode(drow["id"].ToString());
                TreeView1.Nodes.Add(tn);
                subtree(drow ,tn );

            }
        }
   

   
   
    }

    private void subtree(DataRow drow,TreeNode tnd)   //子树
    {
        foreach (DataRow childrow in drow.GetChildRows("rel"))
        { TreeNode tnode = createnode(childrow["id"].ToString () );
        tnd.ChildNodes.Add(tnode);
        subtree(childrow, tnode);
       
        }
    }

    private TreeNode createnode(string id)
    {
        TreeNode node = new TreeNode();
        node.Text =id;
        return node;
    }


这里关键的一句是  ds.Relations.Add("rel", ds.Tables[0].Columns["id"], ds.Tables[0].Columns["pid"]);
以及后面的    foreach (DataRow childrow in drow.GetChildRows("rel"))
用到了relations的方法

另外当我在同一个页面增加子栏目的时候,树里并不会马上就更新的,我又用了个笨办法,就是在增加按钮里加了个 response.redirect 的方法,转回到这个页面,才可以看到树的更新

posted on 2006-04-28 08:32  帝之晓 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/asdio/archive/2006/04/28/387155.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值