treeview创建请教

deansroom 2006-11-17 04:43:50
数据库 oracle9i
开发环境 vs2005(c#)
数据表机构
名称 是否为空? 类型
----------------------------------------- -------- -----------------------
D_ID NOT NULL NUMBER(10)
D_PID NUMBER(10)
D_NAME NVARCHAR2(50)
想根据数据库动态生成treeview
现在的思路一是根据查询结果,直接用递归的方法,但是由于人员太多,明显效率不行
还有是看到vs2005提示使用XMLDatasource作为数据源,但是用xml文档的动态创建不太明白,现在使用DataSet的writexml方法得到的结构如下
- <Table>
<D_ID>2</D_ID>
<D_PID>1</D_PID>
<D_NAME>软件中心</D_NAME>
</Table>
- <Table>
<D_ID>3</D_ID>
<D_PID>1</D_PID>
<D_NAME>技术中心</D_NAME>
</Table>
- <Table>
<D_ID>4</D_ID>
<D_PID>2</D_PID>
<D_NAME>程序员</D_NAME>
如果直接用treeview引用并不能得到想要的结果
望高人指点
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
esayit 2007-03-19
  • 打赏
  • 举报
回复
protected void TreeViewBind(ref TreeView TreeView1)
{
//OracleDataReader odr = db.odr("Select * from dept",db.conn);

try
{
//将查询结果返回到OraclelDataReader


//得到节点结果集
//OracleConnection conn = db.conn();
//conn.Open();
OracleDataReader dr = db.odr("Select * from view_dept_user order by D_order");
//返回树节点最大ID号
OracleDataReader maxid_dr = db.odr("Select max(d_id) as maxid from view_dept_user");


//将树节点最大ID号转换为int型
int count = 0;
if (maxid_dr.Read())
{
count = Convert.ToInt32(maxid_dr["maxid"]);
}
maxid_dr.Close();
//定义对象数组
TreeNode[] myNodes = new TreeNode[count + 1];

//初始化对象数组
for (int i = 0; i < myNodes.Length; i++)
{
myNodes[i] = new TreeNode();
}

//从表中取数据 构建树
while (dr.Read())
{
int iParentNodeId = 0;
if (dr["d_pid"] == System.DBNull.Value)
{
iParentNodeId = 0;
}
else
{
iParentNodeId = Convert.ToInt32(dr["d_pid"]);
}
int iMyNodeId = Convert.ToInt32(dr["d_id"]);

if (iParentNodeId != 0)
{
myNodes[iMyNodeId].Text = Convert.ToString(dr["d_name"]);
Int32 tempid = Convert.ToInt32(dr["d_id"]);//返回人员真实ID并式单位ID超出正常范围不影响以后的结果
if (tempid > 10000)
{
tempid -= 10000;
}
else
{
tempid += 100000;
}
myNodes[iMyNodeId].Value = tempid.ToString();
myNodes[iParentNodeId].ChildNodes.Add(myNodes[iMyNodeId]);
}
else
{
myNodes[iMyNodeId].Text = dr["d_name"].ToString();
Int32 tempid = Convert.ToInt32(dr["d_id"]);//返回真实人员ID
if (tempid > 10000)
{
tempid -= 10000;
}
else
{
tempid += 100000;
}
myNodes[iMyNodeId].Value = tempid.ToString();
myNodes[iMyNodeId].Value = Convert.ToString(dr["d_id"]);
TreeView1.Nodes.Add(myNodes[iMyNodeId]);
}
}
dr.Close();
maxid_dr.Close();
TreeView1.ExpandDepth = 1;

}
catch (Exception ex)
{
ex.ToString().Replace("\n", "<br>");
Response.Write(ex);
}
finally
{

}
}
看看高手
deansroom 2006-11-17
  • 打赏
  • 举报
回复
自己顶一下

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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