Почему Treeview не показывает иерархию?

#c# #asp.net #treeview

#c# #asp.net #просмотр дерева

Вопрос:

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

Запрос

 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 параметр всегда равен 0.

Обновить:

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

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

Комментарии:

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

2. Можете ли вы отлаживать код локально и переходить по строкам?

3. как вы думаете, что я должен сделать, чтобы это сработало?

4. Конечно, я постараюсь отладить, чтобы дать вам обратную связь. Дайте мне несколько минут

5. Я предлагаю уделять больше внимания источникам данных и посмотреть, действительно ли вы получаете правильные значения для parentId параметра