关闭

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

3300人阅读 评论(2) 收藏 举报

     在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;
  }

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:91932次
    • 积分:1287
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:28篇
    • 译文:1篇
    • 评论:10条
    最新评论