Bonjour !
J'ai un petit soucis : je voudrais utiliser un TreeView pour générer un menu dynamiquement à partir d'une table autojointive. J'arrive à attacher les noeuds, mais j'ai une erreur dramatique : je n'arrive pas a "extand" mon TreeView. En gros, il n'affiche que les noeuds de premier niveau.
Mon TreeView est encapsulé dans un UserControl, qui lui même est appelé dans une page.
Voici le code source du UserControl :
public
partialclassMenu : System.Web.UI.UserControl{
publicSite mySite;public LibCMSharp.Content myContent;protectedoverridevoid OnInit(EventArgs e){
mySite =
newSite();myContent =
new LibCMSharp.Content();base.OnInit(e);}
protectedvoid Page_Load(object sender, EventArgs e){
}
publicoverridevoid DataBind(){
this.MenuTreeView.DataBind();CreateNodesOfParent(0, (
TreeNode)null);this.MenuTreeView.ExpandAll();base.DataBind();}
protectedvoid CreateNodesOfParent(int iParent, TreeNode pNode){
DataView dvwData = newDataView(myContent.allContent);dvwData.RowFilter =
"ID_PARENT = '" + iParent+"'";foreach (DataRowView Row in dvwData){
// Call Stack !if (pNode == null){
TreeNode zNode = newTreeNode(Row["TITLE"].ToString());MenuTreeView.Nodes.Add(
newTreeNode(Row["TITLE"].ToString()));CreateNodesOfParent(
Int32.Parse(Row["IDENTIFIER"].ToString()), zNode);}
else{
TreeNode zNode = newTreeNode(Row["TITLE"].ToString());pNode.ChildNodes.Add(
newTreeNode(Row["TITLE"].ToString()));CreateNodesOfParent(
Int32.Parse(Row["IDENTIFIER"].ToString()), zNode);}
}
}
protectedvoid MenuTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e){
if (IsPostBack){
TreeView TN = (TreeView)sender;TreeNode myTN = TN.SelectedNode;myTN.Expand();
}
}
}
Voici maintenant le code Source de ma page :
public
partialclassDefaut : System.Web.UI.Page{
protectedvoid Page_Load(object sender, EventArgs e){
if (!IsPostBack)this.Menu1.DataBind();}
}
J'imagine qu'une subtilité dans le cycle de vie page/userControl m'echape, mais je ne vois pas laquelle.
Merci d'avance !