我在网上找了几个树,都是用add(new node(“”))诸如此类方法追加节点,我现在用SQL查出来这样的记录:一列是级别(level),一列是本身id,一列是名字(name),一列是父(parid);
我现在想把这个结果集动态的加到一个根里,我该怎么加?
例:var tv = new treeview("treeview");
var b = new node("name1","tag");
var c = new node("name2");
var d = new node("name3");
tv.add(b);
b.add(c);
b.add("name8");
c.add(d);帮帮忙吧,脑袋都想大了,实在不会了!都说这东西递归能行,我还递不明白!!
我现在想把这个结果集动态的加到一个根里,我该怎么加?
例:var tv = new treeview("treeview");
var b = new node("name1","tag");
var c = new node("name2");
var d = new node("name3");
tv.add(b);
b.add(c);
b.add("name8");
c.add(d);帮帮忙吧,脑袋都想大了,实在不会了!都说这东西递归能行,我还递不明白!!
node getNode(var parid,var level) //写个根据层次和id找节点的方法
{ ... }
找到其父节点,调用父节点的add即可
node getNode(var parid,var level) //写个根据层次和id找节点的方法
{ ... }
找到其父节点,调用父节点的add即可
希望对你有所帮助
{
if (!Page.IsPostBack)
{
GetDataTable1();
InitTreeRootNode(TreeView1);
if (TreeView1.Nodes.Count == 1)
{
TreeView1.ExpandDepth = 1;
}
}
}
public void GetDataTable1()
{
Database dbase = new Database();
string username = Request.Cookies["Username"].Value.ToString();
SqlParameter[] prams ={ dbase.MakeInParam("@Username", SqlDbType.VarChar, 20, username) };
try
{
dataTbl1 = dbase.RunProcAdd("sp_GetShowClass", prams);
}
catch (Exception ex)
{
KMS.Components.Error.Log(ex.Message);
Response.Write(ex.Message);
}
dataTbl1.TableName = "TreeView";
}
private void GetDataTable2(int nodeID)
{
Database dbase = new Database();
SqlParameter[] prams = { dbase.MakeInParam("@Class_id", SqlDbType.Int, 20, nodeID) };
try
{ dataTbl2 = dbase.RunProcAdd("sp_GetAllChildClass", prams); }
catch (Exception ex)
{
Response.Write(ex.Message);
throw new Exception(ex.Message);
}
dataTbl2.TableName = "TreeView";
}
/// <summary>
/// 初始化TreeView 的 RootNode
/// </summary>
private void InitTreeRootNode(System.Web.UI.WebControls.TreeView TNC)
{
for (int i = 0; i < dataTbl1.Rows.Count; i++)
{
System.Web.UI.WebControls.TreeNode tn = new System.Web.UI.WebControls.TreeNode();
tn.Value = dataTbl1.Rows[i]["ClassID"].ToString();
tn.Text = "<span style='font-size:10pt' onmouseover=javascript:this.style.color='white';this.style.backgroundColor='#8592B5'; onmouseout=javascript:this.style.color='#494949';this.style.backgroundColor='white'; title='" + dataTbl1.Rows[i]["className"].ToString() + "'>" + dataTbl1.Rows[i]["className"].ToString() + "</span>";
tn.ImageUrl = GetIcon(dataTbl1.Rows[i]["classType"].ToString());
tn.NavigateUrl = "../SubModule/UnitiveDocument/switch.aspx?Action=1&ClassID=" + dataTbl1.Rows[i]["classID"].ToString();
tn.Target = "MainFrame";
TNC.ExpandDepth = 1;
TNC.ShowLines = true;
tn.Expanded = false;
TNC.Nodes.Add(tn);
GetDataTable2(int.Parse(tn.Value));
InitTreeChildNode(tn, tn.Value);
}
dataTbl1 = null;
dataTbl2 = null;
} /// <summary>
/// 初始化TreeView 的 ChildNode
/// </summary>
private void InitTreeChildNode(System.Web.UI.WebControls.TreeNode TNC, string classParentID)
{
DataView dataView = new DataView();
dataView = dataTbl2.Copy().DefaultView;
dataView.RowFilter = "ClassParentID = " + classParentID + "";
foreach (DataRowView drv in dataView)
{
System.Web.UI.WebControls.TreeNode tn = new System.Web.UI.WebControls.TreeNode();
tn.Value = drv["ClassID"].ToString();
tn.Text = "<span style='font-size:10pt' onmouseover=javascript:this.style.color='white';this.style.backgroundColor='#8592B5'; onmouseout=javascript:this.style.color='#494949';this.style.backgroundColor='white'; title='" + drv["ClassName"].ToString() + "'>" + drv["ClassName"].ToString() + "</span>";
tn.ImageUrl = GetIcon(drv["ClassType"].ToString());
tn.NavigateUrl = "../SubModule/UnitiveDocument/Switch.aspx?Action=1&ClassID=" + drv["ClassID"].ToString();
tn.Target = "MainFrame";
TNC.ChildNodes.Add(tn);
InitTreeChildNode(tn, tn.Value);
}
} #region 获取节点图标
/// <summary>
/// 获取节点图标
/// </summary>
private string GetIcon(string ClassType)
{
string rtnValue = "../Image/";
switch (ClassType)
{
case "0":
rtnValue += "Icon_flag.gif";
break;
case "1":
rtnValue += "Icon_myDoc.gif";
break;
case "2":
rtnValue += "Iocn_mail.gif";
break;
case "3":
rtnValue += "Icon_page.gif";
break;
case "4":
rtnValue += "Icon_staff.gif";
break;
case "5":
rtnValue += "Iocn_helpPage.gif";
break;
case "6":
rtnValue += "Iocn_myTask.gif";
break;
case "7":
rtnValue += "Iocn_mail.gif";
break;
case "8":
rtnValue += "Icon_myDoc.gif";
break;
case "9":
rtnValue += "Icon_docFlow.gif";
break;
case "10":
rtnValue += "Icon_clientManage.gif";
break;
case "11":
rtnValue += "Icon_myLinkman.gif";
break;
case "12":
rtnValue += "Icon_position.gif";
break;
case "13":
rtnValue += "Icon_roleManage.gif";
break;
case "14":
rtnValue += "Icon_kaoqin.gif";
break;
case "15":
rtnValue += "Icon_workadmin.gif";
break;
case "16":
rtnValue += "Icon_message.gif";
break;
case "17":
rtnValue += "Iocn_subsectionQuery.gif";
break;
case "18":
rtnValue += "Iocn_addresslist.gif";
break;
case "19":
rtnValue += "Icon_contractQuery.gif";
break;
case "20":
rtnValue += "Icon_stockQuery.gif";
break;
case "21":
rtnValue += "memobook.gif";
break;
default:
rtnValue += "Icon_redBall.gif";
break;
}
return rtnValue;
}
#endregion
}
{//根据ParentID得到父结点(当前结点,如果是0则是树根,否则是下级结点for(int i=0;i<list.length;i++)
{
//增加节点
AddNodeByParent(list[i].ID);
}
}这样不就是递归了嘛