首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

小妹真诚求教!TreeView怎么设计无级菜单和展现菜单

2012-03-16 
小妹真诚求教!TreeView如何设计无级菜单和展现菜单!我想做一个无级菜单!结构如下,我不会设计数据库!请师哥

小妹真诚求教!TreeView如何设计无级菜单和展现菜单!
我想做一个无级菜单!结构如下,我不会设计数据库!请师哥们帮忙!
再有数据库设计好之后,如何取出数据显现在TreeView控件上!
谢谢各位师哥了!
中国
    |—北京市
    |—天津市
    |—上海市
    |—河北省
              |—石家庄市
                          |—XX县
              |—邯郸市
    |—河南省
              |—郑州市
              |—新乡市
    |—广东省
              |—广州市
              |—深圳市
                        |—XX县

谢谢各位师哥!请代码明示!C#!小妹我在这里不胜感激!

[解决办法]
在数据库中建一个表:如下! PID说父接点意思
ID PID Name Url
标识 父标识 名字 链接

如:
1 0 中国 #
2 1 河北省 #
连接数据库后的绑定代码:BindTree(this.TreeView1.Nodes, 0);//this.TreeView1就是你的TreeView控件


void BindTree(TreeNodeCollection nds, int parentId)
{
TreeNode tn = null;
foreach (DataRow dr in BLL.DO.TreeviewItem().Select( "PId= " + parentId, "ListID asc "))
{
tn = new TreeNode(dr[ "Name "].ToString(), dr[ "id "].ToString(), null, dr[ "Url "].ToString(), "fmain ");
//tn.ShowCheckBox = true;

nds.Add(tn);

BindTree(tn.ChildNodes, Convert.ToInt32(dr[ "id "]));
}
}
不明白再问我,记得给分^_^ !
[解决办法]
结构
bh name parent
1001 广东
100101 广州 1001
100102 中山 1001
10010201 古镇 100102

Dim dtconn As SqlConnection = New SqlConnection( "data source=.;uid=sa;pwd=aaaaaa;database=tree; ")
Dim dtcmd As SqlCommand
Dim dtreader As SqlDataReader

Dim dtcm As SqlCommand
Dim dtread As SqlDataReader

Dim dtSql As String = "select * from tree order by bh "

dtcmd = New SqlCommand(dtSql, dtconn)
dtconn.Open()
dtreader = dtcmd.ExecuteReader()

While dtreader.Read
Dim root As New TreeNode
root.Text = dtreader( "mc ")
root.Value = dtreader( "bh ")
If dtreader( "parent ") = " " Then
TreeView1.Nodes.Add(root)
End If
FillTree(root)
End While
dtreader.Close()


Sub FillTree(ByVal root As TreeNode)
Dim dtconn As SqlConnection = New SqlConnection( "data source=.;uid=sa;pwd=aaaaaa;database=tree; ")
Dim dtcmd As SqlCommand
Dim dtreader As SqlDataReader

Dim dtSql As String = "select * from tree where parent= ' " + root.Value + " ' "

dtcmd = New SqlCommand(dtSql, dtconn)
dtconn.Open()
dtreader = dtcmd.ExecuteReader()
While dtreader.Read
Dim childroot As New TreeNode
childroot.Text = dtreader( "mc ")
childroot.Value = dtreader( "bh ")


root.ChildNodes.Add(childroot)
FillTree(childroot)
End While
dtreader.Close()
dtconn.Close()
End Sub
[解决办法]
我的数据库设计是
ID PID NAME ListID Url
其中ListID是用来排序的!呵呵
如:
你可以给几个省排序!


[解决办法]
#region 填充树节点
/// <summary>
/// 填充树节点
/// </summary>
/// <param name= "tid "> </param>
/// <param name= "team "> </param>
/// <param name= "task "> </param>
/// <param name= "c "> </param>
static void FillTreeView(string tid,ref DataTable team,ref DataTable task,TreeNodeCollection c)
{
DataRow[] teamRows = team.Select( "ParentID= " + tid);//搜索所有任务组
DataRow[] taskRows = task.Select( "TaskTeamID= " + tid);//搜索所有任务

int l = teamRows.Length;
//加载子分组
for(int i = 0 ; i < l ; ++i)
{
TreeNode n = new TreeNode(teamRows[i][2].ToString(),0,0);
n.Tag = teamRows[i][0];
c.Add(n);
CKlTree.FillTreeView(n.Tag.ToString(),ref team,ref task,n.Nodes);
}
//加载所有任务
l = taskRows.Length;
for(int i = 0 ; i < l ; ++i)
{
TreeNode n = new TreeNode(taskRows[i][2].ToString(),2,2);
n.Tag = taskRows[i][0];
c.Add(n);
}
}
#endregion
[解决办法]
算了,帮你修改成完整代码,希望你能看得明白
数据表

ID PID CName

注:
PID:父ID,例如武汉属于湖北,则数据库代码如下

1 0 湖北
2 1 武汉

CName:城市名称

#region 填充树节点
/// <summary>
/// 填充树节点
/// </summary>
/// <param name= "tid "> 父ID </param>
/// <param name= "team "> 父数据表 </param>
/// <param name= "c "> 父节点集合 </param>
static void FillTreeView(string tid,ref DataTable team,TreeNodeCollection c)
{
DataRow[] teamRows = team.Select( "PID= " + tid);//搜索所有子组

int l = teamRows.Length;
//加载子分组
for(int i = 0 ; i < l ; ++i)
{
TreeNode n = new TreeNode(teamRows[i][2].ToString(),0,0);
c.Add(n);
CKlTree.FillTreeView(teamRows[i][0].ToString(),ref team,n.Nodes);
}
}
#endregion
[解决办法]
算了,帮你修改成完整代码,希望你能看得明白
数据表

ID PID CName

注:
PID:父ID,例如武汉属于湖北,则数据库代码如下

1 0 湖北
2 1 武汉

CName:城市名称

#region 填充树节点
/// <summary>
/// 填充树节点
/// </summary>
/// <param name= "tid "> 父ID </param>
/// <param name= "team "> 父数据表 </param>
/// <param name= "c "> 父节点集合 </param>
static void FillTreeView(string tid,ref DataTable team,TreeNodeCollection c)
{
DataRow[] teamRows = team.Select( "PID= " + tid);//搜索所有子组

int l = teamRows.Length;
//加载子分组
for(int i = 0 ; i < l ; ++i)
{
TreeNode n = new TreeNode(teamRows[i][2].ToString(),0,0);
c.Add(n);
CKlTree.FillTreeView(teamRows[i][0].ToString(),ref team,n.Nodes);
}
}
#endregion
[解决办法]
Dim dtconn As SqlConnection = New SqlConnection( "data source=.;uid=sa;pwd=aaaaaa;database=tree; ")
Dim dtcmd As SqlCommand


Dim dtreader As SqlDataReader

Dim dtcm As SqlCommand
Dim dtread As SqlDataReader

Dim dtSql As String = "select * from tree order by bh "

dtcmd = New SqlCommand(dtSql, dtconn)
dtconn.Open()
dtreader = dtcmd.ExecuteReader()

While dtreader.Read
Dim root As New TreeNode
root.Text = dtreader( "mc ")
root.Value = dtreader( "bh ")
If dtreader( "parent ") = " " Then
TreeView1.Nodes.Add(root)
End If
FillTree(root)
End While
dtreader.Close()


Sub FillTree(ByVal root As TreeNode)
Dim dtconn As SqlConnection = New SqlConnection( "data source=.;uid=sa;pwd=aaaaaa;database=tree; ")
Dim dtcmd As SqlCommand
Dim dtreader As SqlDataReader

Dim dtSql As String = "select * from tree where parent= ' " + root.Value + " ' "

dtcmd = New SqlCommand(dtSql, dtconn)
dtconn.Open()
dtreader = dtcmd.ExecuteReader()
While dtreader.Read
Dim childroot As New TreeNode
childroot.Text = dtreader( "mc ")
childroot.Value = dtreader( "bh ")
root.ChildNodes.Add(childroot)
FillTree(childroot)
End While
dtreader.Close()
dtconn.Close()
End Sub


[解决办法]
这个就是一个递归啊....

http://blog.csdn.net/YUAN168/archive/2007/06/14/1651405.aspx

=============================代码如下:
数据库结构:id,name,parentid

//采用递归的方法动态建立Tree
private void CreateTree(TreeNodeCollection Nds, int parentID)
{
DataView dv = new DataView(dtMaster);
TreeNode tmpNd;
int intID;
dv.RowFilter = "parentid= ' " + parentID + " ' ";
foreach (DataRowView drv in dv)
{
intID = Convert.ToInt16(drv[ "nodeid "]);
tmpNd = new TreeNode();
tmpNd.Name = drv[ "nodeid "].ToString();
tmpNd.Text = drv[ "nodename "].ToString();

Nds.Add(tmpNd);
CreateTree(Nds[Nds.Count - 1].Nodes, intID);
}

}



private void frmNodeConfig_Load(object sender, EventArgs e)
{
FillDate();
this.trvMain.Nodes.Clear();
CreateTree(trvMain.Nodes, 0);
trvMain.Nodes[0].Expand();
}


热点排行