2010-04-16 35 views
0

在MSDN中寫了關於TreeNode的:TreeView控件意外的事件行爲

「默認情況下,節點處於選擇模式。

「要將節點置於選擇模式,請將節點的NavigateUrl屬性設置爲空字符串。」

「當節點處於選擇模式時,使用SelectAction屬性指定在選擇節點時引發哪些事件或事件。」

「設置TreeNodeSelectAction值TreeNodeSelectAction.Select選擇節點時引發SelectedNodeChanged事件。」

請參閱TreeNode

這裏的問題是,可能在控制中的錯誤:

當我設置TreeNode對象PopulateOnDemand值爲true,並調用該節點上的摺疊()函數。 然後除了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) 
{ 


} 

感謝

回答

0

我不知道ASP.Net,但只是讀你的代碼在上面聽起來它設置爲SelectExpand但在您的意見就像你認爲你將它設置爲Select(或者這只是示例代碼中的一個錯字?)。在您的示例中,這兩種方法都寫成:

folderNode.SelectAction = TreeNodeSelectAction.SelectExpand; 
+0

謝謝您的回答!這只是樣本中的一個錯字。 我將更正代碼。 在我的代碼中是TreeNodeSelectAction.Select; – ProgNet 2010-04-19 22:32:34