在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)
{
}
感謝
謝謝您的回答!這只是樣本中的一個錯字。 我將更正代碼。 在我的代碼中是TreeNodeSelectAction.Select; – ProgNet 2010-04-19 22:32:34