1

入力パスに基づいてすべてのディレクトリを表示したい。これまでのところ、ツリービューを達成しました。チェックボックスを使用してAsp.netツリービューを作成するにはどうすればよいですか?

これが私のコードです

protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
   // ListDirectory(tvTreeView, Server.MapPath("~/"));
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("~/"));
    TreeNode mainNode = new TreeNode();

    mainNode.Text = dir.Name;
    mainNode.Checked = true;
    mainNode.NavigateUrl = "~/" + dir.Name;
    TreeView1.Nodes.Add(mainNode);
    foreach (DirectoryInfo subDir in dir.GetDirectories())
    {
        TreeNode parentNode = new TreeNode();

        parentNode.Text = subDir.Name;
        parentNode.NavigateUrl = "~/" + dir.Name + "/" + subDir.Name;


        foreach (FileInfo file in subDir.GetFiles())
        {
            TreeNode subNode = new TreeNode();


            subNode.Text = file.Name;
            subNode.NavigateUrl = "~/" + dir.Name + "/" + subDir.Name + "/" + file.Name;

            //Add it to the parent node
            parentNode.ChildNodes.Add(subNode);
        }

        TreeView1.Nodes[0].ChildNodes.Add(parentNode);
    }
}
4

2 に答える 2

0

あなたのコードを完全に消化しなければ、あなたが抱えている(そして述べていない)問題は、ツリーがそれらのフォルダー内のサブフォルダーとファイルの1つのレベルしか表示しないことだと思います。

これはrecursionの主な使用例です。

これがあなたの問題である場合は、次のような再帰でこれを解決できます(注-これはアドホックです-それをベースとして使用し、一粒の塩で取ってください):

private void AddNodeForDirectory(DirectoryInfo directory, TreeNode directoryNode)
{
    foreach (DirectoryInfo subDirectory in directory.GetDirectories())
    {
        TreeNode subDirectoryNode = new TreeNode
        {
            Text = subDirectory.Name,
            NavigateUrl = // some path... I leave this to you 
        };

        foreach (FileInfo file in subDirectory.GetFiles())
        {
            TreeNode fileNode = new TreeNode
            {
                Text = file.Name,
                NavigateUrl = // some path... I leave this to you
            };  

            subDirectoryNode.ChildNodes.Add(fileNode);
        }

        directoryNode.ChildNodes.Add(subDirectoryNode);

        // Here is the recursion
        this.AddNodeForDirectory(subDirectory, subDirectoryNode);
    }
}

アイデアは、メソッドを呼び出してルート ディレクトリ情報とルート ツリー ノードを渡し、ディレクトリ情報をドリルダウンしてツリーを再帰的に作成するというものです。また、再帰によってスタック オーバーフローが発生する可能性があるため、危険性を認識しておく必要があります。

于 2012-10-18T17:27:44.427 に答える
0

ツリー ビューの CheckBoxes プロパティを true に設定します。

treeView1.CheckBoxes = true;

于 2012-10-18T17:42:54.210 に答える