using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.UI.WebControls.Adapters;public partial class Common_SJ_MMSTemplate : System.Web.UI.Page
{
DataSet dt = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
bind();
} } public void bind()
{
SqlConnection conn = mmsdb.conn();
string sql = "select * from [t_template] where chnnelID=1";
SqlDataAdapter dr = new SqlDataAdapter(sql,conn); dr.Fill(dt,"tree"); //调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null); }
// 递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataView dvTree = new DataView(dt.Tables["tree"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ByTmpID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
if (pNode == null)
{ //'̀添加根节点
TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["tmpid"].ToString()), Node); //再次递归
}
}
} }
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.UI.WebControls.Adapters;public partial class Common_SJ_MMSTemplate : System.Web.UI.Page
{
DataSet dt = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
bind();
} } public void bind()
{
SqlConnection conn = mmsdb.conn();
string sql = "select * from [t_template] where chnnelID=1";
SqlDataAdapter dr = new SqlDataAdapter(sql,conn); dr.Fill(dt,"tree"); //调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null); }
// 递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataView dvTree = new DataView(dt.Tables["tree"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ByTmpID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
if (pNode == null)
{ //'̀添加根节点
TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["tmpid"].ToString()), Node); //再次递归
}
}
} }
AddTree(Int32.Parse(Row["tmpid"].ToString()), Node); //再次递归
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
Row["TmpID"],["tmpid"]???
{ //'̀添加根节点
TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["tmpid"].ToString()), Node); //再次递归
}
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误信息: CS1502: 与“System.Web.UI.WebControls.TreeNodeCollection.Add(System.Web.UI.WebControls.TreeNode)”最匹配的重载方法具有一些无效参数源错误:
行 46: if (pNode == null)
行 47: { //'?添加根节点
行 48: TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
行 49: AddTree(Int32.Parse(Row["TmpID"].ToString()),Node);//再次递归
行 50: }
{
SqlConnection conn = mmsdb.conn();
string sql = "select * from [t_template] where chnnelID=1";
SqlDataAdapter dr = new SqlDataAdapter(sql,conn); dr.Fill(dt,"tree"); //调用递归函数,完成树形结构的生成
AddTree(0, null); }
// 递归添加树的节点
public void AddTree(int ParentID, TreeNodeCollection pNode)
{
DataView dvTree = new DataView(dt.Tables["tree"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ByTmpID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
if (pNode == null)
{ //'̀添加根节点
TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
}
} }
TreeNode Node = TreeView1.Nodes.Add(Row["tmpname"].ToString());
这句错误的。
{
SqlConnection conn = mmsdb.conn();
string sql = "select * from [t_template] where chnnelID=1";
SqlDataAdapter dr = new SqlDataAdapter(sql,conn); dr.Fill(dt,"tree"); //调用递归函数,完成树形结构的生成
AddTree(0, null); }
// 递归添加树的节点
public void AddTree(int ParentID, TreeNodeCollection pNode)
{
DataView dvTree = new DataView(dt.Tables["tree"]);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[ByTmpID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
if (pNode == null)
{ //'̀添加根节点
TreeNode node = new TreeNode();
node.Text=Row["tmpname"].ToString());
AddTree(Int32.Parse(Int32.Parse(Row["TmpID"].ToString()), node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), Node); //再次递归
}
}
} }
递归调用函数的时候pNode类型不匹配的。
还有pNode也没有Nodes这个属性!嗨!
{ //'̀添加根节点
TreeNode node = new TreeNode();
node.Text=Row["tmpname"].ToString());
AddTree(Int32.Parse(Int32.Parse(Row["TmpID"].ToString()), node); //再次递归
}
else
{ //添加当前节点的子节点
TreeNode node = new TreeNode();
node.Text=Row["tmpname"].ToString());
AddTree(Int32.Parse(Row["TmpID"].ToString()), node); //再次递归
}
}
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;
}
你看看。TreeNodeCollection pNode)
函数输入的参数是这个类型,你下面非得要用treenode类型,总是到这里就提示类型错误!
你发一次,我就要改半天
哈哈