TREEVIEW 显示所有节点 winform

fts115 2010-02-02 04:58:34
TREEVIEW 显示所有节点
从数据库调出后在treeview里显示出来。给个列子。可能一个节点下有很多节点(多层次那种)要递归的 winform。
...全文
864 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdsuper 2010-06-08
  • 打赏
  • 举报
回复
还不错,学习下
  • 打赏
  • 举报
回复

public partial class Form1 : Form
{
DataTable dt;//模拟数据库Fill来的数据
TreeView root;//模拟菜单
public Form1()
{
InitializeComponent();
dt = new DataTable();
root = new TreeView();
DataColumn dc1 = new DataColumn("name");
dt.Columns.Add(dc1);
DataColumn dc2 = new DataColumn("parentid", typeof(string));
dc2.AllowDBNull = true;
dt.Columns.Add(dc2);
dt.Rows.Add("File", null);
dt.Rows.Add("Open", "File");
dt.Rows.Add("OpenX", "Open");
dt.Rows.Add("Edit", null);
dt.Rows.Add("Copy", "Edit");
dt.Rows.Add("Cut", "Edit");
}

private void button1_Click(object sender, EventArgs e)
{
CreateMenu();//创建菜单
root.Width = 300;
root.Height = 300;
this.Controls.Add(root);
}

//创建一级菜单
public void CreateMenu()
{
string sql = "parentid is null";
DataRow[] drs = dt.Select(sql);
foreach (DataRow dr in drs)
{
TreeNode node = new TreeNode(dr["name"].ToString());
root.Nodes.Add(node);//创建一级节点
CreateSubMenu(dr, node);//创建子节点
}
}
//创建子菜单
public void CreateSubMenu(DataRow dr, TreeNode node)
{
string menu = dr["name"].ToString();
DataRow[] drs = dr.Table.Select("parentid='" + menu + "'");
foreach (DataRow r in drs)
{
TreeNode n = new TreeNode(r["name"].ToString());
node.Nodes.Add(n);
CreateSubMenu(r, n);//递归创建所有子菜单
}
}

private void Form1_Load(object sender, EventArgs e)
{

}

}


运行后点击Button1按钮出现TreeView结构,符合要求
wuyq11 2010-02-02
  • 打赏
  • 举报
回复
private void InitTree(TreeNodeCollection Nds,string parentId)
{
DataView dv=new DataView();
TreeNode nd;
string intId;
dv.Table=ds.Tables["tree"];
dv.RowFilter="ParentId='" + parentId + "'" ;
foreach(DataRowView drv in dv)
{
nd=new TreeNode();
nd.Tag=drv["Id"].ToString();
nd.Text=drv["Name"].ToString();
Nds.Add(nd);
intId=drv["ParentId"].ToString();
InitTree(nd.Nodes,nd.Tag.ToString());
}
}
treeview
dazhu2 2010-02-02
  • 打赏
  • 举报
回复
if(mycnn.State==System.Data.ConnectionState.Open)
{

MessageBox.Show(" 数据库连接成功 !");
OleDbDataAdapter mya=new OleDbDataAdapter("select * from t1 order by m_id,t_id,[order]",mycnn);
DataSet mydataset=new DataSet();
mya.Fill(mydataset,"one");//填充数据

DataTable mytable=mydataset.Tables[0];
//向TREEVIEW 中填充数据
TreeNode newnode=null;



foreach(DataRow r in mytable.Rows)
{
data1 mydata;
newnode=new TreeNode();
newnode.Text=r[4].ToString();
mydata.id=int.Parse(r[0].ToString());
mydata.m_id=int.Parse(r[1].ToString());
mydata.t_id=r[2].ToString();

//在tag中存放相关信息
newnode.Tag=(object)mydata;

if(int.Parse(r[1].ToString())==1)
{
this.treeView1.Nodes.Add(newnode);
}
else
{
TreeNode node1=null;
int i=int.Parse(r[2].ToString());
foreach(TreeNode nd in this.treeView1.Nodes)
{
//递归的方法
node1=find_node(nd,i);
if(node1!=null)
{
this.treeView1.SelectedNode=node1;
this.treeView1.Focus();
//add node
this.treeView1.SelectedNode.Nodes.Add(newnode);
break;

}

}
if(node1==null)
{
MessageBox.Show("未找到相应的结点");
}
}

}

}
else
MessageBox.Show(" 数据库连接失败 !");


}



//递归的方法
private TreeNode find_node(TreeNode a,int b)
{
TreeNode findnode=null;

//取出节点tag中的数据
object o=a.Tag;
data1 mydata=(data1)o;
string m=mydata.id.ToString();
string n=b.ToString();

if(m==n)
{
findnode=a;
}
else
{
foreach(TreeNode nd in a.Nodes)
{
findnode=find_node(nd,b);
if(findnode!=null)
{
break;
}
}

}
//返回找到的结点
return findnode;
}
huming_h 2010-02-02
  • 打赏
  • 举报
回复
http://hi.baidu.com/xiangxiaozhong/blog/item/cc5b5cd01e61f08ea0ec9c85.html
huming_h 2010-02-02
  • 打赏
  • 举报
回复
参考:
http://www.cnblogs.com/zwffff/archive/2008/11/10/1330871.html
fts115 2010-02-02
  • 打赏
  • 举报
回复
没有人知道吗?

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧