请教高手 在线等 关于vs.net2005中的treeview使用问题

hksl 2007-10-25 12:31:06
protected void BindDataDT()
{
kogbd.DataAccess.SqlService db=new kogbd.DataAccess.SqlService();
string sql = "select top 10 orgid,orgname,parentcode,selfcode from t_Organzation ";
mydataDT = db.GetDataTable(sql);
}
//treeview递归
public void InitTree(TreeNodeCollection tns, string parentid)
{
DataView dv =mydataDT.DefaultView;
dv.RowFilter = "parentcode=" + parentid;
TreeNode tn;
foreach (DataRowView drv in dv)
{
tn = new TreeNode();
tn.Text = drv["parentcode"].ToString()+"_" + drv["selfcode"].ToString() + drv["orgname"].ToString();
tn.Value = drv["selfcode"].ToString();
tns.Add(tn);

InitTree(tn.ChildNodes, tn.Value);
}
}

protected void Button2_Click(object sender, EventArgs e)
{
BindDataDT();
TreeNode node = new TreeNode();
node.Text = "办事机构";
node.Value = "0";
InitTree(TreeView2.Nodes, "0");
}

请问这有问题吗 怎么老通不过了报错
...全文
197 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishijie910123 2007-11-05
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//取得所有节点并返回DS
string empID = treeMenu.selectEmpInfoByEmpName(Session["EmpName"].ToString()).Tables[0].Rows[0]["EmpID"].ToString();
DataSet ds = treeMenu.SelectMobuldInfo(Int32.Parse(empID));
DataTable dt = new DataTable();
dt = ds.Tables[0];
AddNodes(dt, null, "0");
}

}
//递归添加节点
private void AddNodes(DataTable dt, TreeNode node, string id)
{
DataRow[] rows = dt.Select("ParentModuleID=" + id); //筛选出属于父节点“node”的子节点集合
foreach (DataRow dr in rows) //循环子节点集合
{
TreeNode nd = new TreeNode();
nd.Value = dr["quanXianID"].ToString(); //存放节点ID
nd.Text = dr["quanXianMingCheng"].ToString(); //设置节点名称
nd.ImageUrl = dr["imageURL"].ToString();//设置节点的图片
nd.NavigateUrl = dr["URl"].ToString();//设置节点的链接
nd.Target = "MainFrame";
this.AddNodes(dt, nd, nd.Value); //递归,添加该节点的子节点
if (node == null || id == "0")
{
TreeView1.Nodes.Add(nd); //添加至根节点
}
else
{
node.ChildNodes.Add(nd);//添加子节点
}
}
}

我的代码,你看看
hksl 2007-10-25
  • 打赏
  • 举报
回复
读到了
如果把递归哪里注释掉 就可以显示 parentcode为0的数据
hhbkiller 2007-10-25
  • 打赏
  • 举报
回复
先确认你的mydataDT 有没有取到数据吧,跟踪一下就看出来了
hksl 2007-10-25
  • 打赏
  • 举报
回复
说这里
tn.Text = drv["parentcode"].ToString()+"_" + drv["selfcode"].ToString() + drv["orgname"].ToString();

{"在位置 1 处没有任何行。"}

hhbkiller 2007-10-25
  • 打赏
  • 举报
回复
抱什么错,错误信息给出来撒
kyouken2007 2007-10-25
  • 打赏
  • 举报
回复
我总感觉你这种邦定怎么改都会有问题。。。
我的做法是先帮第一级节点,之后再开始调用递归。。

给你找个例子参考一下。。。

http://topic.csdn.net/u/20070921/16/6e0f507d-b5e3-43b6-a07a-e12031bdd704.html

虽然这里边只绑了2级菜单,多级的话你可以在addchildmenu1继续调用addchildmenu1。。。。
hksl 2007-10-25
  • 打赏
  • 举报
回复
to kyouken2007

索引超出范围。必须为非负值并小于集合大小。
参数名: index

kyouken2007 2007-10-25
  • 打赏
  • 举报
回复
少个地方

InitTree(tn, tn.Value);
kyouken2007 2007-10-25
  • 打赏
  • 举报
回复
//treeview递归
public void InitTree(TreeNode tns, string parentid)
{
DataView dv =mydataDT.DefaultView;
dv.RowFilter = "parentcode=" + parentid;
TreeNode tn;
foreach (DataRowView drv in dv)
{
tn = new TreeNode();
tn.Text = drv["parentcode"].ToString()+"_" + drv["selfcode"].ToString() + drv["orgname"].ToString();
tn.Value = drv["selfcode"].ToString();
tns.ChildNodes.Add(tn);

InitTree(tn.ChildNodes, tn.Value);
}
}

protected void Button2_Click(object sender, EventArgs e)
{
BindDataDT();
TreeNode node = new TreeNode();
node.Text = "办事机构";
node.Value = "0";
InitTree(TreeView2.Nodes[0], "0");
}
NekChan 2007-10-25
  • 打赏
  • 举报
回复
tn.Value

修改为

tn.NodeData
seedling_lq 2007-10-25
  • 打赏
  • 举报
回复
改成如下

protected void Button2_Click(object sender, EventArgs e)
{
BindDataDT();
TreeNode node = new TreeNode();
node.Text = "办事机构";
node.Value = "0";
TreeView2.Nodes.Add(node);

InitTree(TreeView2.Nodes[0].ChildNodes, "0");
}


62,243

社区成员

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

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

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

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