TreeView填充

lixin_1314 2010-11-18 02:52:24
数据库:
lbcode lbname lbprior
0101 总则 01
010101 内容 0101
010101001 第一条 010101
01 安全规程 0
0201 国家局5号令 02
020101 内容 0201
020101001 第一条 020101
02 安全生产基本条件规定 0
循环读取出来再TreeView上面显示如下:\

安全规程
总则
内容
第一张
安全生产基本条件规定
国家局5号令
内容
第一条
跪求...
...全文
256 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanlu0012 2011-12-06
  • 打赏
  • 举报
回复
点击gridControl某一行,对应树节点显示
private void ParentTree()
{
tree_GongNeng.Nodes.Clear();//先清空树列表

DataALLGongNeng();//获取所有功能

GetQuanXianGongNeng(QuanXianID);//所选权限对应的功能
//循环绑定父节点
foreach (DataRow dr in QuanXianGongNengDB.Rows)
{
//遍历加载父节点
if (Convert.ToInt32(dr["PModuleNo"]) == 0)
{
TreeNode newNode = new TreeNode(dr["name"].ToString());
tree_GongNeng.Nodes.Add(newNode);

ChildLoad(dr, newNode, QuanXianGongNengDB);
}
}

this.tree_GongNeng.ExpandAll();//展开树节点
}

//绑定子节点
private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (Convert.ToInt32(dr["ModuleNO"]) == Convert.ToInt32(row["PModuleNo"]))
{
TreeNode childNode = new TreeNode();
childNode.Text = row["name"].ToString();
newNode.Nodes.Add(childNode);

ChildLoad(row, childNode, dt); //递归子节点
}
}
}
安得权 2010-11-18
  • 打赏
  • 举报
回复
您好,不好意思,下午有点忙,趁下班之前给你写了一个,实体如下:

主要代码如下:
①初始化一个数据源:
List<EntTestInfo> lstTest;
private void TreeViewTest_Load(object sender, EventArgs e)
{
lstTest = new List<EntTestInfo>();
lstTest.Add(new EntTestInfo(101, "根节点101", 0));
lstTest.Add(new EntTestInfo(102, "根节点102", 0));
lstTest.Add(new EntTestInfo(10101, "101的子节点1", 101));
lstTest.Add(new EntTestInfo(10102, "101的子节点2", 101));
lstTest.Add(new EntTestInfo(10201, "102的子节点1", 102));
lstTest.Add(new EntTestInfo(10202, "102的子节点2", 102));
lstTest.Add(new EntTestInfo(10203, "102的子节点3", 102));
}
②:主要方法(递归思想)

/// <summary>
/// 分类管理目录树展示
/// </summary>
/// <param name="iParentID">父节点编号</param>
/// <param name="pNode">父节点</param>
private void ShowTreeView(int iParentID, TreeNode pNode)
{
try
{
//[ 把取得的分类信息形成目录树 ]
foreach (EntTestInfo ENI in lstTest)
{
//[ 判断是否有节点存在 ]
if (ENI.ParentID == iParentID)
{
//[ 有节点存在 ]
//[ 创建节点对象 ]
TreeNode treeNode = new TreeNode();
//[ 判断是否是根节点 ]
if (null == pNode)
{
//[ 是根节点 ]
//[ 创建根节点信息 ]
treeNode.Text = ENI.Name.ToString().Trim();
treeNode.Tag = ENI.ID.ToString().Trim();
//[ 添加根节点到目录树中 ]
tvTest.Nodes.Add(treeNode);
//[ 循环取得所有根节点并添加到目录树 ]
ShowTreeView(Convert.ToInt32(ENI.ID.ToString().Trim()), treeNode);
}
else
{
//[ 不是根节点 ]
//[ 创建所有子节点 ]
treeNode.Text = ENI.Name.ToString().Trim();
treeNode.Tag = ENI.ID.ToString().Trim();
//[ 添加叶节点到对应根节点 ]
pNode.Nodes.Add(treeNode);
//[ 循环取得此根节点下的所有子节点并添加到目录树 ]
ShowTreeView(Convert.ToInt32(ENI.ID.ToString().Trim()), treeNode);
}
}
}
}
catch (Exception)
{
}
}
③在委托(事件)中调用:
private void btnTest_Click(object sender, EventArgs e)
{
ShowTreeView(0, null);
}

如果还需要更复杂的功能,你把需求发我邮箱,尽快回复你,嘿嘿~!~ 拜拜了 下班回家
ds252743641 2010-11-18
  • 打赏
  • 举报
回复
数据库结构:   
id name parentid
1 一级 0
2 科技 1
3 沈阳 2
4 二级 0
5 美食 4
6 哈尔滨 5
7 三级 0
8 美食 7
9 大连 8

private void LoadTree()
{
treeView1.Nodes.Clear(); //先清空树
DataTable dt = ds.Tables[0]; //把表结构从数据库查出来放到DataTable中
//循环绑定父节点
foreach (DataRow dr in dt.Rows)
{
//遍历加载父节点
if (Convert.ToInt32(dr["parentid"]) == 0)
{
TreeNode newNode = new TreeNode(dr["name"].ToString());
treeView1.Nodes.Add(newNode);

ChildLoad(dr, newNode, dt);
}
}

this.treeView1.ExpandAll();
}

//绑定子节点
private void ChildLoad(DataRow dr, TreeNode newNode, DataTable dt)
{
foreach (DataRow row in dt.Rows)
{
if (Convert.ToInt32(dr["id"]) == Convert.ToInt32(row["parentid"]))
{
TreeNode childNode = new TreeNode();
childNode.Text = row["name"].ToString();
newNode.Nodes.Add(childNode);

ChildLoad(row, childNode, dt); //递归子节点
}
}
}
-小蕾- 2010-11-18
  • 打赏
  • 举报
回复
第二种方法:先查出你那张表的所有信息到ds里面.然后调用下面的方法.

/// <summary>
/// 创建DataSet的方法
/// </summary>
/// <param name="nodes">TreeView的根节点</param>
/// <param name="ds">Dataset数据集合</param>
/// <param name="pid">节点的父</param>
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid)
{
//定义筛选条件
string sql = string.Format("lbcode={0}", pid);

//从Dataset中筛选符合条件的行的集合
DataRow[] drr = ds.Tables[0].Select(sql);

//遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
//tnode.ImageUrl = "images/foldericon1.gif";
tnode.Text = dr["lbname"].ToString();
tnode.Value = dr["lbcode"].ToString();
//设置显示的路径
tnode.NavigateUrl = dr["PurURL"].ToString();
//递归调用方法
CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["lbcode"]));
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr);

}
}

-小蕾- 2010-11-18
  • 打赏
  • 举报
回复

#region 添加所有节点
private void AddNode()
{
//获取到所有信息
DataTable dt = PurViewManager.GetAllPurView();
//获取所有父节点
DataRow[] drs = dt.Select("lbprior=0");
for (int i = 0; i < drs.Length; i++)
{
TreeNode node = new TreeNode();
node.Text = drs[i]["lbname"].ToString();
node.Value = drs[i]["lbcode"].ToString();
//添加子节点
DataRow[] childdrs = dt.Select("lbprior=" + node.Value);
for (int j = 0; j < childdrs.Length; j++)
{
TreeNode childnode = new TreeNode();
childnode.Text = childdrs[j]["lbname"].ToString();
childnode.Value = childdrs[j]["lbcode"].ToString();
node.ChildNodes.Add(childnode);
}

TreeView1.Nodes.Add(node);
}
}
安得权 2010-11-18
  • 打赏
  • 举报
回复
以上功能都是本人做的 源码肯定有的 只是在公司不方便
安得权 2010-11-18
  • 打赏
  • 举报
回复

楼主的问题可以加我QQ465631791或者留言到本人邮箱andequanaaa@163.com,我会尽快回复

以上图片中展示的功能都可以分享(注:早上9点到晚上9点是上班时间,无特殊情况,不能进行回复,谅解!!!!)
lixin_1314 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 csethcrm 的回复:]

[/Quote]
是这一种的.有没有源码?
lixin_1314 2010-11-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fellowcheng 的回复:]
C# code
DataTable dtlModel = new DataTable();
private void CreateData() {
dtlModel.Columns.Add("id", typeof(Int32));
dtlModel.Columns.Add("pid", typeof(Int32));
……
[/Quote]
请问你这个BindTree()方法怎么在程序初始的时候调用?
安得权 2010-11-18
  • 打赏
  • 举报
回复
fellowcheng 2010-11-18
  • 打赏
  • 举报
回复
DataTable dtlModel = new DataTable();
private void CreateData() {
dtlModel.Columns.Add("id", typeof(Int32));
dtlModel.Columns.Add("pid", typeof(Int32));
dtlModel.Columns.Add("name");

for (int i = 1; i < 6; i++) {
DataRow dr = dtlModel.NewRow();
dr["id"] = i;
dr["pid"] = 0;
dr["name"] = i.ToString();
dtlModel.Rows.Add(dr);
for (int j = 1; j < 6; j++) {
DataRow dr1 = dtlModel.NewRow();
dr1["id"] = int.Parse(i.ToString() + j.ToString());
dr1["pid"] = i;
dr1["name"] = i + "_" + j;
dtlModel.Rows.Add(dr1);
for (int k = 1; k < 6; k++) {
DataRow dr2 = dtlModel.NewRow();
dr2["id"] = int.Parse(i.ToString() + j.ToString() + k.ToString());
dr2["pid"] = dr1["id"];
dr2["name"] = i + "_" + j + "_" + k;
dtlModel.Rows.Add(dr2);
}
}
}
}

private void BindTree(DataRow[] rows, TreeNode node) {
foreach (DataRow r in rows) {
if (r["pid"] == DBNull.Value)
continue;

//如果是根结点,添加到TreeView控件
if (r["pid"].ToString() == "0") {
TreeNode node1 = new TreeNode();
node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
node1.Value = r["id"].ToString();

//node1.Target = "top";
TreeView1.Nodes.Add(node1);
BindTree(dtlModel.Select("pid=" + r["id"]), node1);
}
else if (node != null) {//否则添加到当前结点
TreeNode node1 = new TreeNode();
node1.Text = string.Format("<input name='hd_{0}' type='hidden' value='{1}'/>{2}", r["id"], r["id"], r["name"].ToString());
node1.Value = r["id"].ToString();
//node1.Target = "top";
node.ChildNodes.Add(node1);
BindTree(dtlModel.Select("pid=" + r["id"]), node1);//递归生成子树
}
}
}
xuzysun 2010-11-18
  • 打赏
  • 举报
回复
3楼的不错!!
symbol_bc 2010-11-18
  • 打赏
  • 举报
回复
代码很多啊!
楼主看这段代码

public partial class BindTreeView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

departList = new List<Department>() {
new Department{ ID = 1, ParentID= 0, Name=" 老总"},
new Department{ ID = 2, ParentID= 1, Name=" 市场副总"},
new Department{ ID = 3, ParentID= 1, Name=" 技术副总"},
new Department{ ID = 4, ParentID= 1, Name=" 行政副总"},
new Department{ ID = 5, ParentID= 2, Name=" 市场部"},
new Department{ ID = 6, ParentID= 4, Name=" 财务部"},
new Department{ ID = 7, ParentID= 4, Name=" 行政部"},
new Department{ ID = 8, ParentID= 3, Name=" C#技术部"},
new Department{ ID = 9, ParentID= 3, Name=" JAVA技术部"},
new Department{ ID = 10, ParentID= 9, Name=" J2EE技术部"},
new Department{ ID = 11, ParentID= 9, Name=" J2ME技术部"}
};

TreeNode root = new TreeNode();

root.Text = this.departList[0].Name;
root.Value = this.departList[0].ID.ToString();
root.Checked = true;

this.TreeView1.Nodes.Add(root);

this.BindToTree(root);
}

/// <summary>
/// 对象列表
/// </summary>
private List<Department> departList;


/// <summary>
/// 绑定到树
/// </summary>
/// <param name="node"></param>
private void BindToTree(TreeNode node)
{
if (node != null)
{
var temp = from dept in departList
where dept.ParentID.ToString() == node.Value
select dept;

List<Department> tempList = temp.ToList<Department>();

tempList.ForEach(delegate(Department t)
{
TreeNode tnode = new TreeNode();
tnode.Text = t.Name;
tnode.Value = t.ID.ToString();
tnode.Checked = true;

node.ChildNodes.Add(tnode);

BindToTree(tnode);
});
}
}
}


http://topic.csdn.net/u/20101117/16/03ac66b9-b844-4afa-9838-a57db4618cc7.html
qqrto 2010-11-18
  • 打赏
  • 举报
回复
做个while循环,再加上一个计数变量,从0开始搜索,每找到一个,就将它加到TreeView中,再利用它的lbcode去搜索下一个数据,如果有下一条,就继续查询,并将下一条作为子节点添加到它的下面,如果没有了,就将计数变量+1,在查询,如果没有,则跳出while循环,这时,TreeView已经构造好了
whrspsoft3723 2010-11-18
  • 打赏
  • 举报
回复
搜下论坛中相关的贴子,类似的很多。

110,566

社区成员

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

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

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