0

ディレクトリ構造を表示するために使用しているツリービューがあります。ノード展開時にサブノードをロードすることで、ロード時間を短縮しようとしています。これを行う方法はありますか?

以下は、ツリービューを作成するために現在使用しているコードです。

protected void Page_Load(object sender, EventArgs e) {
    BuildTree(Request.QueryString["path"]);
}
private void BuildTree(string dirPath)
{
    //get root directory
    System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(dirPath);

    //create and add the root node to the tree view
    TreeNode rootNode = new TreeNode(rootDir.Name, rootDir.FullName);
    TreeView1.Nodes.Add(rootNode);

    //begin recursively traversing the directory structure
    TraverseTree(rootDir, rootNode);
}
private void TraverseTree(System.IO.DirectoryInfo currentDir, TreeNode currentNode)
{
    //loop through each sub-directory in the current one
    foreach (System.IO.DirectoryInfo dir in currentDir.GetDirectories())
    {
            //create node and add to the tree view
            TreeNode node = new TreeNode(dir.Name, dir.FullName);
            currentNode.ChildNodes.Add(node);

            //recursively call same method to go down the next level of the tree
            TraverseTree(dir, node);
    }

    foreach (System.IO.FileInfo file in currentDir.GetFiles())
    {
        TreeNode node = new TreeNode(file.Name, file.FullName);
        currentNode.ChildNodes.Add(node);
    }
}
4

1 に答える 1

0

オンデマンドでノードをロードするため。つまり、ノードの子ノードは、親ノードが展開されたときにのみロードされます。次の手順を実行します。

1 - TreeView.ExpandDepth0に設定します。TreeNodeこれにより、追加されたオブジェクトの展開が削除され、プロパティがtrueに設定されている各オブジェクトの横にTreeView展開記号[+]が表示されます。TreeNodeTreeNode.PopulateOnDemand

2-各ブランチのTreeNode.PopulateOnDemandTrueに設定します。コレクションがの場合、展開記号[+]は、プロパティがtrueに設定されているオブジェクトの横にのみ表示されます。 TreeNodeTreeNode.ChildNodesTreeNodeTreeNode.PopulateOnDemand

3- TreeView.TreeNodePopulateイベントを処理して、展開時にブランチ ノードを設定します。このイベントは、イベントが発生する直前に - がtrueTreeNodeTreeNode.PopulateOnDemand設定されている - が展開されたときに発生します。TreeView.TreeNodeExpanded

出典: ASP.NET TreeView とオンデマンドでのデータの読み込み

于 2013-02-21T00:30:59.280 に答える