ASP.NET TreeView Web Control 添加,删除,修改

原创 2006年05月28日 08:37:00

     在Visual Studio 2003 中,TreeView Web Control 默认是没有安装的,如果需要,可以到微软的官方网站下载,或是用搜索引擎查找,网上有很多。安装后,通过“自定义工具箱”-->”.net框架组件”把TreeView添加到工具箱里。 运行时无法显示 :  一般是TreeView的版本问题,最好下载英文版自动安装版本重新安装,安装前应该先到添加删除程序里卸掉原版本 ;显示格式出错(非树状显示):TreeView要求客户端浏览器版本为IE5.5及以上,最好要求客户端升级为IE6.0   ;使用时,要引用命名空间 using Microsoft.Web.UI.WebControls;

    TreeView控件的使用:

1、建立数据库

IF EXISTS(SELECT * FROM sysobjects WHERE ID = object_id('Jxt_DeviceManage_DeviceType')
AND OBJECTPROPERTY(ID,'IsTable') = 1)
DROP TABLE Jxt_DeviceManage_DeviceType
CREATE TABLE Jxt_DeviceManage_DeviceType --设备类型表
(TID INT NOT NULL IDENTITY PRIMARY KEY,--设备类型ID
TypeName VARCHAR(90) NOT NULL UNIQUE,  --类型名称 设备(暖通,电梯,电气) 设施(建筑物,道路)...
PID INT--设备父接点ID
)  

CREATE FUNCTION funGetTypeChildTid(@id INT) --用于遍历类型子节点的函数
RETURNS @re TABLE(tid INT)
AS
BEGIN
 INSERT INTO @re SELECT tid FROM Jxt_DeviceManage_DeviceType WHERE pid=@id
 WHILE @@ROWCOUNT>0
  INSERT INTO @re SELECT a.tid
   FROM Jxt_DeviceManage_DeviceType a INNER JOIN @re b ON a.pid=b.tid
   WHERE a.tid NOT IN(SELECT tid FROM @re)
 RETURN
END

 

2、将数据从SQL 数据库读出来,并填充到TreeView控件

using System.Data.SqlClient;

/// <summary>
  /// 返回一个DataTable类型的函数。
  /// </summary>
  /// <param name="strCmd">查询SQL语句</param>
  /// <returns>DataTable值</returns>
  public DataTable ExecuteSql(string strCmd)
  {
   SqlConnection conn = new SqlConnection(strConn);  /*strConn是数据库连接字符串, server=localhost;database=Market;User id=sa;password=W#e@8521*$;pooling=true;Max Pool Size=10000 */
   DataSet ds = new DataSet();
   SqlDataAdapter da = new SqlDataAdapter(strCmd,conn);
   da.Fill(ds);
   return ds.Tables[0];
  }

/// <summary>
  /// 循环遍历,增加节点
  /// </summary>
  /// <param name="dt">内存中的数据表,DataTable类型</param>
  /// <param name="node">树节点,TreeNode类型</param>
  /// <param name="id">要筛选子节点的父节点ID</param>
  private void AddNodes(DataTable dt,TreeNode node,string id)
  {
   DataRow[] rows = dt.Select("PID="+id); //筛选出属于父节点 “node”的子节点集合
   foreach(DataRow dr in rows) //循环子节点集合
   {
    TreeNode nd = new TreeNode();
    //nd.NavigateUrl=dr["URL"].ToString(); //设置浏览的网址
    nd.NodeData=dr["TID"].ToString(); //存放节点 ID
    nd.Text=dr["TypeName"].ToString();   //设置节点名称
    this.AddNodes(dt,nd,nd.NodeData);    //递归,添加该节点的子节点
    if(node==null || id=="0")
    {
     TreeView1.Nodes.Add(nd);    //添加至根节点
    }
    else
    {
     node.Nodes.Add(nd);              //添加子节点
    }
   }
  }

/// <summary>
 /// 显示设备类型的树状结构
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(IsPostBack)
   {
    return ;
   }
   DataTable dt = ExecuteSql("select * from Jxt_DeviceManage_DeviceType");//从数据库抓出数据
   this.AddNodes(dt,null,"0");   //添加节点
   this.TreeView1.SelectedNodeIndex="";   //不选中任何节点。
   this.TreeView1.ExpandLevel=2;  //默认展开深度
   this.TreeView1.ShowLines = true;
  } 


删除节点

/// <summary>
  /// 删除节点,如果为最后一个节点,则不能删除,保证至少有一个节点;
  /// 当节点下还有节点时,不能删除,处于最底层的节点,如果下面有数据,则不能删除
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
  private void btnDelete_Click(object sender, System.EventArgs e)
  {
   string tid = Session["tid"].ToString();
   string strCmdDel = "DELETE Jxt_DeviceManage_DeviceType WHERE TID='"+tid+"'";
   string returnValue = "是根节点,不能删除";
   int count = 0;

   if(Convert.ToInt16(tid) > 1)
   {
    if(nodeNumber > 0)
    {
     returnValue = "该节点下还有"+nodeNumber+"个节点,不能删除";
    }
    else
    {
     string strCmd = "SELECT COUNT(*) FROM Jxt_DeviceManage_DeviceBasicData WHERE TID='"+TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).NodeData.ToString()+"'";
     conn = new SqlConnection(strConn);
     conn.Open();
     SqlCommand cmdCount = new SqlCommand(strCmd,conn);
     try
     {
      count = Convert.ToInt16(cmdCount.ExecuteScalar().ToString());
     }
     catch{count = 0;}
     if(count > 0)
     {
      returnValue = "还有"+count+"条记录,不能删除";
     }
     else
     {
      cmd = new SqlCommand(strCmdDel,conn);
      try
      {
       cmd.ExecuteNonQuery();
       returnValue = "删除记录成功.";
      }
      catch
      {
       returnValue = "操作失败.";
      }
      finally
      {
       cmd.Dispose();
      }
     }
     conn.Close();
     conn.Dispose();
    }
   }
   Response.Write("<Script Language=/"JavaScript/">alert(/""+returnValue+"./");</Script>");
   Response.Write("<script language=/"JavaScript/">parent.main.location.href='AllDeviceInit.aspx'</script>");
//   Response.Write("<script>top.location.href=top.location.href;</script>");
  }

/// <summary>
  /// 获取所有的子类型,包括本身TID
  /// </summary>
  /// <param name="tid">父tid</param>
  /// <returns>ArrayList值</returns>
  private ArrayList GetTypeID(string tid)
  {
   ArrayList  arTID = new ArrayList();
   string strCmd = "SELECT * FROM funGetTypeChildTid('"+tid+"')";
   conn = new SqlConnection(strConn);
   SqlDataAdapter da = new SqlDataAdapter(strCmd,conn);
   DataSet ds = new DataSet();
   try
   {
    da.Fill(ds);
    int rowLen = ds.Tables[0].Rows.Count;
    for(int i = 0 ;i< rowLen; i++)
    {
     arTID.Add(ds.Tables[0].Rows[i][0]);
    }
    arTID.Add(tid);
   }
   catch
   {
    arTID.Add(tid);
   }
   finally
   {
    conn.Close();
    conn.Dispose();
   }
   return arTID;
  }

添加,修改跟一般的数据库操作一样,这里就不在作介绍。

asp.net treeview数据库绑定 (节点添加 删除 修改)

  ...

浅析动态添加、删除、修改TreeView节点

 接着上一篇浅析TreeView绑定效率>>继续讲讲TreeView。在实际项目过程中,TreeView往往会动态的绑定数据,操作界面一旦新添加、修改、删除节点数据,在TreeView中要时时反映新添...

asp.net中TreeView的大数据加载速度优化

由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx "Panel2" runat="server" Height="600px" ScrollBars="Auto"> ...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

ASP.NET TreeView 的那点事 【给你七棵大树——TreeView大总结——有源码】

本来打算过些日子总结树的,看看最近几个网友发消息(邮件)问我相关树方面的问题,今天我没有休息,花了3个多小时总结我们在使用树中经常遇到的问题,好了下面就让我们来看看这些树吧!第一棵:使用AJAX 按需...

asp.net中利用jquery zTree异步加载数据

jquery zTree需要使用的js和css,可以从下列地址获取:http://download.csdn.net/detail/taomanman/88655431、用于获取JSON数据的代码:u...

ASP.NET TreeView动态绑定数据库显示

Treeview动态的绑定3层深度的树的代码

asp.net中TreeView异步延迟加载

在使用TreeView控件的时候,如果数据量太大,这个TreeView控件加载会很慢,有时甚至加载失败, 为了更好的使用TreeView控件加载大量的数据,采用异步延迟加载TreeView。 ...
  • sxycgxj
  • sxycgxj
  • 2014年08月26日 14:03
  • 583

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略 UpdatePanel局部刷新的使用 ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET TreeView Web Control 添加,删除,修改
举报原因:
原因补充:

(最多只允许输入30个字)