我在包含遞歸嵌套子文件夾的服務器上有一個公用文件夾。 在包含圖像的各種Leaf文件夾中。 我想創建一個服務器端文件瀏覽器,將圖像顯示給用戶。 我正在使用ASP.NET TreeView控件。 我使用PopulateOnDemand創建樹節點。 如果用戶點擊葉子目錄,我希望該文件夾中的圖像顯示在DataList控件中。TreeView控件問題
的問題是,當我的子樹節點上單擊(後我擴大它的父節點) 所有擴展子樹消失和只有父節點表明沒有+符號旁邊!
(我已經設置TreeView的PopulateNodesFromClient屬性爲true)
有人能告訴我是什麼問題?
感謝
下面是代碼:
<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);
}
}
private void PopulateTopNodes(string pathToRootFolder)
{
DirectoryInfo dirInfo = new DirectoryInfo(pathToRootFolder);
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
TreeNode folderNode = new TreeNode(dir.Name,dir.FullName);
if (dir.GetDirectories().Length > 0)
{
folderNode.PopulateOnDemand = true;
folderNode.Collapse();
}
TreeView1.Nodes.Add(folderNode);
}
}
protected void TreeView1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
if (IsCallback == true)
{
if (e.Node.ChildNodes.Count == 0)
{
LoadChildNode(e.Node);
}
}
}
private void LoadChildNode(TreeNode treeNode)
{
DirectoryInfo dirInfo = new DirectoryInfo(treeNode.Value);
DirectoryInfo[] dirs = dirInfo.GetDirectories();
foreach (DirectoryInfo dir in dirs)
{
TreeNode folderNode = new TreeNode(dir.Name, dir.FullName);
if(dir.GetDirectories().Length>0){
folderNode.PopulateOnDemand = true;
folderNode.Collapse();
}
treeNode.ChildNodes.Add(folderNode);
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
// Retrieve the images here
}
親愛的Jan, 謝謝您的回答。 當TreeView.PopulateNodesFromClient屬性爲 爲true(默認值)時,TreeView執行客戶端回調以檢索它需要的節點 給定節點只根據需要填充一次。之後,這些值在客戶端保持可用,如果同一個節點被摺疊並展開,則不執行回調。 這就是控制應該表現的方式。 (也許使用SelectedNodeChanged事件與PopulateNodesFromClient等一起造成該錯誤?) 我會看看你推薦的例子。 謝謝 – ProgNet 2010-04-04 15:13:31
我從我的例子 [Here](http://www.aspnettutorials.com/tutorials/controls/treeview-open-files-cs.aspx) – ProgNet 2010-04-04 15:24:06
對我來說,似乎你的差異代碼,並且示例是,他們在Page_Load中執行的所有操作都設置了根節點 - 其他所有內容都由客戶端調用填充。您正在加載Page_Load中的所有節點。 – 2010-04-04 15:35:35