【发布时间】: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