В MSDN написано о TreeNode, который:
"По умолчанию узел находится в режиме выбора."
"Чтобы перевести узел в режим выбора, установите для свойства NavigateUrl узла пустую строку."
"Когда узел находится в режиме выбора, используйте свойство SelectAction, чтобы указать, какое событие или события возникают при выборе узла."
"Установка значения TreeNodeSelectAction TreeNodeSelectAction.Select Вызывает событие SelectedNodeChanged при выборе узла."
Пожалуйста, посмотрите TreeNode
Вот проблема и, возможно, ошибка в элементе управления:
Когда я устанавливаю значение PopulateOnDemand объекта TreeNode в true и вызываю функцию Collapse () на этом узле.
Затем возникает событие TreeNodeExpanded в дополнение к событию SelectedNodeChanged.
Это противоречит тому, что написано в MSDN.
Согласно MSDN это может произойти, только если для свойства TreeNodeSelectAction установлено значение
TreeNodeSelectAction.SelectExpand value.
Кто-нибудь знает, в чем причина?
Вот код:
<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)
{
}
Спасибо