为什么Treeview不显示层次结构?

时间:2016-10-11 03:22:13

标签: c# asp.net treeview

我在系统中添加了一个树视图。我可以设法显示树视图的内容。但输出与我的预期不一样。这里我添加了一个输出图像。请看一下。

aspx代码

<asp:TreeView ID="TreeView1" runat="server" ImageSet="XPFileExplorer"
                         NodeIndent="15">
     <HoverNodeStyle Font-Underline="True" ForeColor="#6666AA" />
     <NodeStyle Font-Names="Tahoma" Font-Size="8pt" ForeColor="Black" HorizontalPadding="2px"
              NodeSpacing="0px" VerticalPadding="10px"></NodeStyle>
     <ParentNodeStyle Font-Bold="False" />
     <SelectedNodeStyle BackColor="#B5B5B5" Font-Underline="False" HorizontalPadding="0px"
              VerticalPadding="2px" />
</asp:TreeView>

C#代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        dt=getDataObj.treeSketch();
        PopulateTreeView(dt, 0, null);
    }
}       

private void PopulateTreeView(DataTable dsParent, int parentId, TreeNode treeNode)
{
     foreach (DataRow row in dsParent.Rows)
     {
          TreeNode child = new TreeNode
          {
                Text = row["FUNCTION_NAME"].ToString(),
                Value = row["FUNCTION_CODE"].ToString()
          };
          if (parentId == 0)
          {
                TreeView1.Nodes.Add(child);
                dt = getDataObj.loadTree(child);
                PopulateTreeView(dt, int.Parse(child.Value), child);
          }
          else
          {
                treeNode.ChildNodes.Add(child);
          }
     }
 }

TreeView image
在这里,大写字母中的节点是主节点,而其他节点是子节点。为什么它看起来不像树视图?如何使它工作?

查询

public DataTable loadTree(TreeNode child)
{
     string strQuery = @"select FUNCTION_CODE,USER_TYPE from [WEB_FUNCTIONACCESS]
                        where FUNCTION_CODE = '"+ child +"' ";

    return SqlHelper.ExecuteDataset(strConnStringAppeal, CommandType.Text, strQuery).Tables[0];
}

1 个答案:

答案 0 :(得分:1)

问题实际上非常明显。

if (parentId == 0)
      {
            TreeView1.Nodes.Add(child);
            dt = getDataObj.loadTree(child);
            PopulateTreeView(dt, int.Parse(child.Value), child);
      }
      else
      {
            treeNode.ChildNodes.Add(child);
      }

所以条件是如果parentId为0则添加根级别节点,否则在子级别添加。

现在,当您调用此方法PopulateTreeView(dt, 0, null)时,parentId参数始终为 0

更新

在给定子值的情况下,我看到您对方法PopulateTreeView进行了递归调用。 int.Parse(child.Value)这总是评估为0?

问题是您使用了child的引用,它为您提供了TreeNode对象。你真正应该使用的是child.Value,它为你提供了一个字符串值。然后你可以将它附加到那里的查询字符串。