在线求援: ~~`关于DOM递归实现无限级树效果!欢迎大家都来指点下,回复者都有分 下班后皆分 谢谢
各位大师:
要求用递归实现如下树的效果:
-车
---汽车
---摩托车
---火车
-船
---轮船
---汽艇
---小舟
且点击后可以伸缩;
能实现无限级 最好;
[解决办法]
~我用的有不一
你大概的思路,希望能到忙
private void nodeBind(System.Data.DataTable dt , Infragistics.WebUI.UltraWebNavigator.Nodes node)
{
if( dt.Rows.Count > 0 )
{
for( int i = 0 ; i < dt.Rows.Count ; i++)
{
if(dt.Rows[i]["Parent_guid"].ToString() == "root")
node.Add(dt.Rows[i]["cate_name"].ToString(),dt.Rows[i]["cate_guid"].ToString());
else
node.Add(dt.Rows[i]["cate_name"].ToString(),dt.Rows[i]["cate_guid"].ToString());
}
}
else
{
return;
}
for(int j = 0 ; j < dt.Rows.Count ; j++)
{
string cate = dt.Rows[j]["cate_guid"].ToString();
string str = "select a.* from cate a where a.parent_guid = '"+cate+"'";
this.m_SystemConnection.SQL = str;
DataTable dd = this.m_SystemConnection.GetDt();
nodeBind(dd ,node[j].Nodes);
}
}
里的有有parent_guid 的上一
[解决办法]
是不是动态加菜单啊?
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
AddNode(TreeView1);
TreeView1.CollapseAll();
}
}
private void AddNode(TreeView treeView)
{
for (int i = 0; i < 10; ++i)
{
TreeNode parentTreeNode = new TreeNode(i.ToString());
for (int j = 0; j < 10; ++j)
{
TreeNode clientTreeNode = new TreeNode(j.ToString());
parentTreeNode.ChildNodes.Add(clientTreeNode);
}
treeView.Nodes.Add(parentTreeNode);
}
}
[解决办法]
顶了
[解决办法]
我也顶下.学习
[解决办法]
up
[解决办法]
mark,学习下。
[解决办法]
用递归算法就行了么
[解决办法]
试试1楼的方法
[解决办法]
mark
[解决办法]
jf
[解决办法]
转:
public partial class DefaultTree : System.Web.UI.Page
{
string sql = null;
SqlDataAdapter da = null;
SqlConnection con = new SqlConnection("server=(local);database=****;uid=**;pwd=**");
int j = 0;
int count = 0;
int depth = 0;
ArrayList dep = new ArrayList();
DataSet TreeTable = new DataSet();
public string html = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//GetUserName("admin");
}
}
//判断父亲接点是否还有兄弟
public bool JudgeBrother(string current, int i)
{
string nextnode;
bool flag =true;
while (true)
{
i++;
if (i == count - 1)
{
break;
}
nextnode = TreeTable.Tables[0].Rows[i]["ID"].ToString().Trim();
if (nextnode.Length > current.Length) //比他长可能是叶子,在下一级
{
continue;
}
else if (nextnode.Length < current.Length)
{
break;
}
else //有兄弟
{
flag = false;
break;
}
}
return flag;
[解决办法]
}
//有兄弟是false;
public void GetUserName(string username)
{
int i = 1;
da = new SqlDataAdapter("select * from MenuFunc123 order by ID", con);
da.Fill(TreeTable);
this.count = TreeTable.Tables[0].Rows.Count;
Response.Write( "<div class='stylediv'onClick=ClickMenu('maindiv','nolines','0')>");
Response.Write( "<img id=nolines0 src='plus_nolines.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img id=open0 src='open.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)'><span class='stylespan'>港华燃气</span></a></div>");
Response.Write( "<div id='maindiv'>");
Response.Write( "<div class='stylediv'onClick=ClickMenu('div_" + i.ToString() + "','plus','" + i.ToString() + "')>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
for (int mm = depth; mm >0; mm--)
{
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img id=plus" + i.ToString() + " src='plus.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img id=open" + i.ToString() + " src='open.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)'>" + "<span class='stylespan'>" + TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim() + "</SPAN></a></div>");
Response.Write( "<div id='div_" + i.ToString() + "' style='display: none'>");
this.depth++; //第一级
dep.Add(false);
//string ff = dep[0].ToString();
CreatTrees(TreeTable.Tables[0].Rows[1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[2]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[2]["FuncName"].ToString().Trim(), 2,false);
Response.Write( "</div>");
Response.Write( "</div>");
}
//flag=true 表示无兄弟
void CreatTrees(string por, string current, string currentname, int i,bool flag) //i的位置跟current 一样
{
if (i == count - 1) //说名是最后一个
{
Response.Write( "<div class='stylediv'>");
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
for (int mm = depth; mm > 0; mm--)
{
if (flag && mm == 1 && depth < 2)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img src='joinbottom.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
}
else
{
string nextnode = TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim();
if (current.Length > por.Length) //比他长可能是叶子,在下一级
{
if (current.Length < nextnode.Length) //说名他也是一个父亲接点
{
Response.Write( "<div class='stylediv'onClick=ClickMenu('div_" + i.ToString() + "','plus','" + i.ToString() + "')>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
flag=JudgeBrother(current, i);
for (int mm = depth; mm > 0; mm--)
{
if (flag&&mm==1&&depth<2)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img id=plus" + i.ToString() + " src='plus.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img id=open" + i.ToString() + " src='open.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)'>" + "<span class='stylespan'>" + TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim() + "</SPAN></a></div>");
Response.Write( "<div id='div_" + i.ToString() + "' style='display: none'>");
[解决办法]
this.depth++;
dep.Add(flag);
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1,flag);
}
else if (current.Length == nextnode.Length)//--------------------他就是叶子------------
{
//Response.Write( "<div class='treenode" + depth.ToString() + "'><img src='style/icons/folder.gif' /><a target=\"mainFrame\" href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + " " + currentname + "</a></div>";
Response.Write( "<div class='stylediv'>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
//for (int mm = depth; mm > 0; mm--)
//{
// if (flag && mm == 1)
// {
// Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
// break;
// }
// Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
//}
[解决办法]
int nn = 0;
for (int mm = depth; mm > 0; mm--)
{
if (flag && mm == 1)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
if (dep[nn].ToString() == "False")
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
if (dep[nn++].ToString() == "True")
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img src='join.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
else //长度比下一个大,下一个在上级,又是叶子。
{
//Response.Write( "<div class='treenode" + depth.ToString() + "'><img src='style/icons/folder.gif' /><a target=\"mainFrame\" href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + " " + currentname + "</a></div>";
Response.Write( "<div class='stylediv'>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
for (int mm = depth; mm > 0; mm--)
{
if (flag && mm == 1)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img src='joinbottom.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
}
else if (current.Length < por.Length)//比他短,他出在上一及
{
int j = (por.Length) / 2 - (current.Length) / 2;
while (j > 0)
{
Response.Write( "</div>");
this.depth--;
this.dep.RemoveAt(this.depth);
j--;
}
if (current.Length < nextnode.Length) //说名他也是一个父亲接点
{
//Response.Write( "<div class='title" + depth.ToString() + "'onClick='ClickMenu(classa_" + i.ToString() + ",imgb_" + i.ToString() + ")' onmousemove='ChangeColora(b" + i.ToString() + ")' onmouseleave='ChangeColorb(b" + i.ToString() + ")'><img src='style/icons/folder.png' id='imgb_" + i.ToString() + "' /><a style='cursor: hand' id='b" + i.ToString() + "'>" + " " + currentname + "</a></div>"; // TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim()
//Response.Write( "<div id='classa_" + i.ToString() + "' style='display: none'>";
Response.Write( "<div class='stylediv'onClick=ClickMenu('div_" + i.ToString() + "','plus','" + i.ToString() + "')>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
flag = JudgeBrother(current, i);
for (int mm = depth; mm > 0; mm--)
{
if (flag && mm == 1 && depth < 2)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img id=plus" + i.ToString() + " src='plus.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img id=open" + i.ToString() + " src='open.gif'width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)'>" + "<span class='stylespan'>" + TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim() + "</SPAN></a></div>");
Response.Write( "<div id='div_" + i.ToString() + "' style='display: none'>");
this.depth++;
dep.Add(flag);
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
[解决办法]
else if (current.Length == nextnode.Length)//他就是叶子
{
//Response.Write( "<div class='treenode" + depth.ToString() + "'><img src='style/icons/folder.gif' /><a target=\"mainFrame\" href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + " " + currentname + "</a></div>";
Response.Write( "<div class='stylediv'>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
//flag = false;
for (int mm = depth; mm > 0; mm--)
{
//if (flag && mm == 1)
//{
// Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
// break;
//}
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img src='join.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
else //长度比下一个大,下一个在上级
{
//Response.Write( "<div class='treenode" + depth.ToString() + "'><img src='style/icons/folder.gif' /><a target=\"mainFrame\" href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + " " + currentname + "</a></div>";
Response.Write( "<div class='stylediv'>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
int nn = 0;
for (int mm = depth; mm > 0; mm--)
{
//if (flag && mm == 1)
//{
// Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
// break;
//}
if (dep[nn].ToString() == "False")
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
if (dep[nn++].ToString() == "True")
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img src='joinbottom.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
}
[解决办法]
else if (current.Length == por.Length) //处在同一及
{
if (current.Length < nextnode.Length) //--------父亲------------------
{
//Response.Write( "<div class='title" + depth.ToString() + "'onClick='ClickMenu(classa_" + i.ToString() + ",imgb_" + i.ToString() + ")' onmousemove='ChangeColora(b" + i.ToString() + ")' onmouseleave='ChangeColorb(b" + i.ToString() + ")'><img src='style/icons/folder.png' id='imgb_" + i.ToString() + "' /><a style='cursor: hand' id='b" + i.ToString() + "'>" + " " + currentname + "</a></div>"; // TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim()
//Response.Write( "<div id='classa_" + i.ToString() + "' style='display: none'>";
Response.Write( "<div class='stylediv'onClick=ClickMenu('div_" + i.ToString() + "','plus','" + i.ToString() + "')>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
flag = JudgeBrother(current, i);
int nn=0;
for (int mm = depth; mm > 0; mm--)
{
//if(dep[n].ToString())
//if (flag && mm == 1)
//{
// Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
// break;
//}
if (dep[nn].ToString()=="False")
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
if (dep[nn++].ToString()=="True")
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
}
Response.Write( "<img id=plus" + i.ToString() + " src='plus.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img id=open" + i.ToString() + " src='open.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)'>" + "<span class='stylespan'>" + TreeTable.Tables[0].Rows[i]["FuncName"].ToString().Trim() + "</SPAN></a></div>");
Response.Write( "<div id='div_" + i.ToString() + "' style='display: none'>");
this.depth++;
dep.Add(flag);
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1, flag);
}
else if (current.Length >= nextnode.Length) //叶子
{
//Response.Write( "<div class='treenode" + depth.ToString() + "'><img src='style/icons/folder.gif' /><a target=\"mainFrame\" href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + " " + currentname + "</a></div>";
Response.Write( "<div class='stylediv'>");
Response.Write( "<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
//for (int mm = depth; mm > 0; mm--)
//{
// Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
//}
if (current.Length == nextnode.Length)//说明是下一个是父亲
flag=JudgeBrother(current, i);
int nn = 0;
for (int mm = depth; mm > 0; mm--)
{
if (flag && mm == 1)
{
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
break;
}
if (dep[nn].ToString() == "False")
Response.Write("<img src='line.gif' width='18px' height='18px' align='absmiddle' />");
if (dep[nn++].ToString() == "True")
Response.Write("<img src='empty.gif' width='18px' height='18px' align='absmiddle' />");
}
if (current.Length == nextnode.Length)
Response.Write( "<img src='join.gif' width='18px' height='18px' align='absmiddle' />");
else
Response.Write( "<img src='joinbottom.gif' width='18px' height='18px' align='absmiddle' />");
Response.Write( "<img src='folder.gif' width='16px' height='16px' align='absmiddle' />");
Response.Write( "<a target=\"mainFrame\" onmousemove='ChangeColora(this)' onmouseleave='ChangeColorb(this)' href='JumpPage.htm?page=" + TreeTable.Tables[0].Rows[i]["FuncUrl"].ToString().Trim() + "'>" + "<span class='stylespan'> " + currentname + "</span></a></div>");
CreatTrees(current, TreeTable.Tables[0].Rows[i + 1]["ID"].ToString().Trim(), TreeTable.Tables[0].Rows[i + 1]["FuncName"].ToString().Trim(), i + 1,flag);
}
}
}
}
}
[解决办法]
网上这方面的控件比较多 COPY 过来 改改