TreeView案例

TreeView无限级的绑定,添加,删除,修改。

一、使用Ajax+ashx+access数据库实现TreeView无刷新操作。

效果图:

TreeView案例_第1张图片

案例一下载地址:http://download.csdn.net/detail/lovegonghui/9254347

 

二、可以通过TreeView实现增删改查,数据库采用的是Access,操作采用OleDbHelper

数据库说明
classId
className
classDescrip
parentId,父级编号,顶级为0
sortId,排序编号,
删除的时候,把sortId大于此编号的,全部减一。
增加的时候,在最大编号上加一。
上移的时候,与前面交换sortId,先判断是否已经是最前了。即是否为0
下移的时候,与后面交换sortId,先判断是否已经是最后了。即是否为childNum+1
depth,深度,0为顶级。
childNum,子级数量,0为没有。

增加操作
1.如果是顶级,则parentId=0,depth=0
  sortId,按最大值
2.如果有父级,则操作父级,childNum增1
  sortId,按childNum+1,depth为父级depth+1

删除操作
1.判断是否有子类,即parentId=当前classId,有则不可删除。
2.无,则判断是否是顶级。有父级,则父级childNum减1.  找到sortId,把父级sortId大于此的减1

关键代码:

 /// 
    /// 增加同级
    /// 
    /// 
    /// 
    protected void imgBtnAddNode_Click(object sender, ImageClickEventArgs e)
    {
        if (tvType.SelectedNode != null)
        {
            if (tvType.SelectedValue != "-1")//根结点不算
                bodyUrl = "body.aspx?type=add&classId=" + tvType.SelectedValue;
        }
        else
            Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请选择类别!');;", true);
    }
    /// 
    /// 增加子级
    /// 
    /// 
    /// 
    protected void imgBtnAddChildNode_Click(object sender, ImageClickEventArgs e)
    {
        if (tvType.SelectedNode != null)
        {
                bodyUrl = "body.aspx?type=addChild&classId=" + tvType.SelectedValue;
        }
        else
            Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请选择类别!');;", true);
    }
    /// 
    /// 删除
    /// 
    /// 
    /// 
    protected void imgBtnDeleteNode_Click(object sender, ImageClickEventArgs e)
    {
        if (tvType.SelectedNode != null)
        {
            if (tvType.SelectedNode == tvType.Nodes[0])
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('根结点不能删除');", true);
                return;
            }
            if (!classes.HasChild(Convert.ToInt32(tvType.SelectedValue)))
            {
                //先把同级重新排序
                DataTable dt = classes.GetByClassId(Convert.ToInt32(tvType.SelectedValue));
                classes.UpdateSort(Convert.ToInt32(dt.Rows[0]["sortId"].ToString()), Convert.ToInt32(dt.Rows[0]["parentId"].ToString()));
                classes.UpdateChildNum(Convert.ToInt32(dt.Rows[0]["parentId"].ToString()), false);
                //再删除
                classes.DeleteClass(Convert.ToInt32(tvType.SelectedValue));
                Response.Redirect("tree.aspx");
            }
            else
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请先删除子级!');;", true);
        }
        else
            Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请选择类别!');;", true);
    }
    /// 
    /// 上移
    /// 
    /// 
    /// 
    protected void imgBtnUp_Click(object sender, ImageClickEventArgs e)
    {
        if (tvType.SelectedNode != null)
        {
            if (tvType.SelectedNode == tvType.Nodes[0])
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('根结点不能移动');", true);
                return;
            }
            DataTable dt = classes.GetByClassId(Convert.ToInt32(tvType.SelectedValue));
            DataTable dtUp = classes.GetUpDown(Convert.ToInt32(tvType.SelectedValue), true);
            if (dt.Rows[0]["sortId"].ToString() != "0")
            {
                classes.ChangeSort(Convert.ToInt32(dt.Rows[0]["classId"].ToString()), true);
                classes.ChangeSort(Convert.ToInt32(dtUp.Rows[0]["classId"].ToString()), false);
                Response.Redirect("tree.aspx");
            }
            else
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('已经排在上面!');", true);
        }
        else
            Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请选择类别!');;", true);
    }
    /// 
    /// 下移
    /// 
    /// 
    /// 
    protected void imgBtnDown_Click(object sender, ImageClickEventArgs e)
    {
        if (tvType.SelectedNode != null)
        {
            if (tvType.SelectedNode == tvType.Nodes[0])
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('根结点不能移动');", true);
                return;
            }
            DataTable dt = classes.GetByClassId(Convert.ToInt32(tvType.SelectedValue));
            DataTable dtDown = classes.GetUpDown(Convert.ToInt32(tvType.SelectedValue), false);
            if (dtDown.Rows.Count > 0)
            {
                classes.ChangeSort(Convert.ToInt32(dt.Rows[0]["classId"].ToString()), false);
                classes.ChangeSort(Convert.ToInt32(dtDown.Rows[0]["classId"].ToString()), true);
                Response.Redirect("tree.aspx");
            }
            else
                Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('已经排在下面!');", true);
        }
        else
            Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "alert('请选择类别!');;", true);
    }

    /// 
    /// 最简单的无限级绑定,这里的效率需要改进
    /// 
    /// 
    /// 
    private void PopulateTreeView(int parentId, TreeNode parentNode)
    {
        DataView dv = classes.GetClass("parentId=" + parentId.ToString()).DefaultView;
        foreach (DataRowView drv in dv)
        {
            TreeNode myNode = new TreeNode(drv["className"].ToString());
            //myNode.Expanded = false;
            myNode.Value = drv["classId"].ToString();
            myNode.Target = "bodyFrame";
            myNode.NavigateUrl = "body.aspx?classId=" + drv["classId"].ToString();
            parentNode.ChildNodes.Add(myNode);
            PopulateTreeView(Convert.ToInt32(drv["classId"].ToString()), myNode);
        }
    }


运行效果图:

TreeView案例_第2张图片

案例二下载地址:http://download.csdn.net/detail/lovegonghui/9272251

 

三、Jquery+ashx+JavaScript+json+database生成带CheckBox无限级TreeView

1:支持静态的树,即一次性将全部数据加载到客户端。

2:异步树,即一次只加载一级或若干级节点,子节点可以异步加载数据。

3:Checkbox树(可能是静态树也可能是异步树),用于选择(如选择组织机构,选择数据字典项)等,最好是能够支持节点级联(这个是难点)

4:能够承载大数据量,并性能表现优异

5:能够在主流浏览器中运行良好

运行效果图:

TreeView案例_第3张图片

 

案例三下载地址:http://download.csdn.net/detail/lovegonghui/9276491

 

四、SQL数据库无限级绑定TreeView

运行效果图:

TreeView案例_第4张图片

 

案例四下载地址:http://download.csdn.net/detail/lovegonghui/9280111

 

你可能感兴趣的:(Controls,treeview,ajax,ashx,json,checkbox)