2016-10-11 7 views
0

自分のシステムにツリービューを追加しました。ツリービューの内容を表示することができました。しかし、出力は私が期待したものと同じではありません。ここでは出力のイメージを追加しました。それを見てください。なぜツリービューに階層が表示されないのですか?

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
ここで大文字AR内のノードメインノードとその他は子ノードです。なぜそれはツリービューのように見えませんか?それを動作させるには?

クエリ

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のパラメータは常にになります。

アップデート:私はあなたが方法、PopulateTreeViewへの再帰呼び出しを持って見

、子供値与えられました。 int.Parse(child.Value)これは常に0と評価されますか?

問題は、childの参照を使用してTreeNodeオブジェクトを与えることです。あなたが本当に使っているはずの文字列値はchild.Valueです。次に、それをクエリ文字列に追加することができます。

+0

実際にこのコードはインターネット上に見つかりました。だから私はまだそれについて適切な考えを持っていない – Mike

+0

コードをローカルでデバッグして、行をステップ実行できますか? – woodykiddy

+0

あなたはこの仕事をするために何をすべきでしょうか? – Mike

関連する問題