您的位置:首页 > 编程语言 > ASP

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

2006-05-28 08:37 656 查看
在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;
}

添加,修改跟一般的数据库操作一样,这里就不在作介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: