【问题标题】:TreeView Control unexpected event behaviorTreeView 控件意外事件行为
【发布时间】:2011-05-09 18:29:27
【问题描述】:

在 MSDN 中写了关于 TreeNode 的内容:

“默认情况下,节点处于选择模式。”

“要将节点置于选择模式,请将节点的 NavigateUrl 属性设置为空字符串。”

“当节点处于选择模式时,使用 SelectAction 属性来指定在选择节点时引发哪些事件或事件。”

“设置 TreeNodeSelectAction 值 TreeNodeSelectAction.Select 在选择节点时引发 SelectedNodeChanged 事件。”

请看TreeNode

这是问题所在,可能是控件中的错误:

当我将 TreeNode 对象 PopulateOnDemand 值设置为 true 并在该节点上调用 Collapse() 函数时。 然后除了 SelectedNodeChanged 事件之外,还会引发 TreeNodeExpanded 事件。 这与 MSDN 中所写的内容完全矛盾。 根据 MSDN,仅当 TreeNodeSelectAction 属性设置为 TreeNodeSelectAction.SelectExpand 值。

有人知道这是什么原因吗?

代码如下:

<asp:TreeView ID="TreeView1" runat="server" AutoGenerateDataBindings="False" 
                    onselectednodechanged="TreeView1_SelectedNodeChanged" 
                    ontreenodepopulate="TreeView1_TreeNodePopulate">
                </asp:TreeView>



protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        string path = Server.MapPath(".");
        PopulateTopNodes(path);

    }
}

//MSDN : Occurs when a node with its PopulateOnDemand property set to true is expanded in   //the  TreeView control.
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
   LoadChildNode(e.Node);      
}

private void PopulateTopNodes(string pathToRootFolder)
{
    DirectoryInfo dirInfo = new DirectoryInfo(pathToRootFolder);
    DirectoryInfo[] dirs = dirInfo.GetDirectories();
    foreach (DirectoryInfo dir in dirs)
    {
        string relativePath = (dir.FullName).Replace(pathToRootFolderPrefix, "");
        TreeNode folderNode = new TreeNode(dir.Name, relativePath);

        if (dir.GetDirectories().Length > 0)
        {
            folderNode.PopulateOnDemand = true;
            folderNode.Collapse();

        }
        folderNode.NavigateUrl = "";
        folderNode.SelectAction = TreeNodeSelectAction.Select;
        TreeView1.Nodes.Add(folderNode);
    }
}

 private void LoadChildNode(TreeNode treeNode)
{


    string d = treeNode.NavigateUrl;
    string action = treeNode.SelectAction.ToString(); 


    string fullPath = Path.Combine(pathToRootFolderPrefix, treeNode.Value);
    DirectoryInfo dirInfo = new DirectoryInfo(fullPath);


    DirectoryInfo[] dirs = dirInfo.GetDirectories();
    foreach (DirectoryInfo dir in dirs)
    {


        string relativePath = (dir.FullName).Replace(pathToRootFolderPrefix, "");
        TreeNode folderNode = new TreeNode(dir.Name, relativePath);

        if(dir.GetDirectories().Length>0){
            folderNode.PopulateOnDemand = true;
            folderNode.Collapse();

        }
        folderNode.NavigateUrl = "";
        folderNode.SelectAction = TreeNodeSelectAction.Select;
        treeNode.ChildNodes.Add(folderNode);
    }
}

//MSDN:Occurs when a node is selected in the TreeView control.
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{


}

谢谢

【问题讨论】:

    标签: c# asp.net treeview controls


    【解决方案1】:

    我不知道 ASP.Net,但只是阅读您的代码,您将其设置为 SelectExpand,但在上面的 cmets 中,听起来您认为您将其设置为 Select(或者这只是示例代码?)。在您的示例中的两种方法中,它都写为:

    folderNode.SelectAction = TreeNodeSelectAction.SelectExpand;
    

    【讨论】:

    • 感谢您的回答!这只是示例中的一个错字。我会更正代码。在我的代码中它是 TreeNodeSelectAction.Select;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    相关资源
    最近更新 更多