asp.net 树形控件 无限级分类能绑定 但是不能分级问题求助。

guanghua100 2008-07-14 02:42:00

TREEVIEW 无限分类 数据是读出来了却不能分级别。。。

请各位大侠看看哪里出问题了或者提出好的建议



    public void buiTreeView(string pid)
{


TreeNode MyTreeNode = new TreeNode();

string sql = "select * from 产品类别表 where 上级父编号 = " + pid + " order by 排序";

Hisidon.Components.DB db = new Hisidon.Components.DB();

SqlDataReader sdr = db.getReader(sql);

while (sdr.Read())
{



MyTreeNode = CreateTreeNode(sdr[1].ToString(), sdr[0].ToString());

TreeView1.Nodes.Add(MyTreeNode);

this.buiTreeView(sdr[0].ToString());
}

sdr.Close();

db.Free();

}


这里调用
  protected void Button1_Click1(object sender, EventArgs e)
{
TreeView1.Nodes.Clear();
buiTreeView("0");

}
...全文
251 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
周睿 2010-01-26
  • 打赏
  • 举报
回复
楼上的不错,这种递归要注意,不能每次递归去查一下数据库,血泪的教训,要一次全查出来在来绑定树
JeffChung 2008-07-15
  • 打赏
  • 举报
回复
很久以前写的,比较简陋,看官请见谅

protected void Page_Load(object sender, EventArgs e)
{
SqlConnection myConn = new SqlConnection("user id=sa;password=123;Database =test;data source=jeff;");
try
{
//初始化连接字符串

SqlDataAdapter myAdapter = new SqlDataAdapter("select * from menu order by parentID ", myConn); ;
DataSet ds = new DataSet();
myAdapter.Fill(ds);
this.ViewState["ds"] = ds;
}
catch (Exception ex)
{
Session["Error"] = ex.ToString();

}
finally
{
myConn.Close();
}
//调用递归函数,完成树形结构的生成
AddTree(0, (TreeNode)null);

}


//递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataSet ds = (DataSet)this.ViewState["ds"];
DataView dvTree = new DataView(ds.Tables[0]);

//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTID] = " + ParentID;

foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{ //添加根节点
Node.Text = Row["Title"].ToString();
TreeView1.Nodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
else
{ //̀添加当前节点的子节点
Node.Text = Row["Title"].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
AddTree(Int32.Parse(Row["ID"].ToString()), Node); //再次递归
}
}
}

guanghua100 2008-07-15
  • 打赏
  • 举报
回复
我自己顶上去
guanghua100 2008-07-14
  • 打赏
  • 举报
回复
能够给个具体点的代码吗 兄弟实在是没思路了。 汗颜
shilei831115 2008-07-14
  • 打赏
  • 举报
回复
LZ再分析树形控件的加载方式吧…… 其实很简单……
myyihua 2008-07-14
  • 打赏
  • 举报
回复
其实你已经使用了递归了,只是你得到的节点都加到了跟节点上了
你应该使用递归的时候,同时把相应节点(A)当成参数传进去,然后把A的子节点加上A上面去,而不是直接加到TreeView1上
myyihua 2008-07-14
  • 打赏
  • 举报
回复
public void buiTreeView(string pid)
{


TreeNode MyTreeNode = new TreeNode();

string sql = "select * from 产品类别表 where 上级父编号 = " + pid + " order by 排序";

Hisidon.Components.DB db = new Hisidon.Components.DB();

SqlDataReader sdr = db.getReader(sql);

while (sdr.Read())
{



MyTreeNode = CreateTreeNode(sdr[1].ToString(), sdr[0].ToString());

TreeView1.Nodes.Add(MyTreeNode);

this.buiTreeView(sdr[0].ToString());
}

sdr.Close();

db.Free();

}

加颜色的那句你看下呢,你把所有的节点都放到树的跟节点去了,肯定就没有分层了
guanghua100 2008-07-14
  • 打赏
  • 举报
回复
............难道这问题就不值得关注吗?
guanghua100 2008-07-14
  • 打赏
  • 举报
回复
自己继续顶
guanghua100 2008-07-14
  • 打赏
  • 举报
回复
兄弟 麻烦详细点 或者贴出代码来 要有注释的噢。
FlowerJunjie 2008-07-14
  • 打赏
  • 举报
回复
用递归
guanghua100 2008-07-14
  • 打赏
  • 举报
回复
自己顶上去

61,830

社区成员

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

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

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

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