2016-10-11 2 views
0

Я добавил дерево к моей системе. Мне удалось показать содержимое древовидной структуры. Но результат не такой, какой я ожидал. Здесь я добавил изображение вывода. Пожалуйста, взгляните на это.Почему 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

Проблема на самом деле довольно очевидно.

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 всегда .

Update:

Я вижу, у вас есть рекурсивный вызов метода, PopulateTreeView, учитывая значение ребенка. int.Parse(child.Value) это всегда оценивается как 0?

Проблема: вы использовали ссылку child, которая дает вам объект TreeNode. То, что вы действительно должны использовать, - child.Value, которое дает вам строковое значение. Затем вы можете добавить его в строку запроса.

+0

На самом деле этот код я нашел в Интернете. Так что даже у меня пока нет правильного представления об этом – Mike

+0

Можете ли вы отлаживать код локально и проходить через линии? – woodykiddy

+0

как вы думаете, что мне делать, чтобы сделать эту работу? – Mike

Смежные вопросы