Créer dynamiquement un treeview
Je suis en train de créer une arborescence de manière dynamique à l'aide de c# et asp.net.
J'ai créé un lazy load treeview à l'aide de la remplir à la demande de l'attribut.
> <asp:TreeView ID="treeView1" runat="server"
> OnTreeNodePopulate="treeview1_TreeNodePopulate"></asp:TreeView>
Derrière le code que j'ai chargé mes données mais j'ai d'abord remplir les nœuds parents. Ce que je veux réaliser est quand je clique sur le nœud parent je puis faire une publication, puis de renseigner son enfant, puis de nouveau remplir son enfant et de le faire aujourd'hui. J'ai des milliers de données, de sorte que je ne veux pas toutes les données pour être peuplée en raison de la performance. C'est la raison pour laquelle je ne veux remplir le nœud de l'enfant basé sur le nœud sélectionné. Voir l'exemple ci-dessous:
>Peter
- - >user1
- - >user2
- - >user3
- - >userPassword
- - >userId
>john
>david
>Jack
- - >user1
- - >user2
- - >userpassword
- - >userId
- - >Permissions
>Laura
- - > admin
- - > permissions
-- > user1
-- > user2
- - >userpassword
- - >userId
- - >Permissions
>...
>...
>...
Comme vous pouvez le voir il peut y avoir plusieurs nœuds parents et de plusieurs couches. Ceux-ci seront répercutées dynically basé sur ce que je passe pour la base de données. Chaque fois que je clique sur le nœud, il va développez le nœud et remplir son enfant à l'aide de publication et ensuite, lorsque vous cliquez sur son enfant nouveau, il va faire une publication et remplir son enfant à nouveau, etc. Donc, je voulais de l'aide sur la façon de créer une dynamique treeview.
c# :
private void LoadTreeview()
{
//Load data
//Get data from DB.
//loop through the list and build its parent nodes.
foreach (var dxm in list)
{
TreeNode tnParent = CheckNodeExist(dxm.Node); //I check to see if exists.
if (tnParent== null)
{
TreeNode tn = new TreeNode();
tn.Text = dxm.Node;
tn.Value = dxm.Id.ToString();
tn.SelectAction = TreeNodeSelectAction.None;
tn.Collapse();
treeView1.Nodes.Add(tn);
tn.PopulateOnDemand = true; //lazy load
tnParent= tn;
}
}
Cette méthode ci-dessus est appelée au chargement de la page.
Sur TreeNodePopulateEvent: (lorsqu'un nœud est cliqué sur)
protected void treeview1_TreeNodePopulate(object sender, TreeNodeEventArgs e)
{
ICollection<ITEMS> list = new Collection<ITEMS>();
list = GetData(e.Node.Text); //pass in the node you have selected this will go and check in DB if the node does have any child nodes. If so will return with child nodes.
foreach (var dxm in list)
{
TreeNode tnChild = CheckNodeExist(dxm.Node);
if (tnChild == null)
{
TreeNode tn = new TreeNode();
tn.Text = dxm.Node;
tn.Value = dxm.Id.ToString();
tn.SelectAction = TreeNodeSelectAction.None;
tn.Collapse();
tn.PopulateOnDemand = true;
tnChild = tn;
tnChild.ChildNodes.Add(tnChild);
}
}
}
OriginalL'auteur user929153 | 2012-02-01
Vous devez vous connecter pour publier un commentaire.
Je crois que vous êtes à la recherche pour le SelectedNodeChanged événement. Vous devriez être en mesure de charger votre enfant nœuds dans cet événement. Fondamentalement, cet événement sera déclenché à chaque fois que vous sélectionnez un nœud en cliquant sur elle.
Votre aspx
Votre code-behind
mis à jour pour montrer comment ajouter...
btw, "LinksTreeView" vous devez le remplacer par l'ID de votre arborescence, j'ai copié et collé à partir de quelques vieux code et qui a été l'ID qui a été utilisé sur mon exemple particulier.
Son pas de tir le cas lorsque je clique sur le nœud?? <asp:TreeView ID="treeView1" runat="server" OnSelectedNodeChanged="Select_Change"></asp:TreeView> protected void Select_Change(object sender, EventArgs e) {}
Ok essayez de cette façon, aller à la vue de la conception de votre page qui contient l'arborescence et sélectionnez le contrôle treeview. Ensuite, allez à votre onglet propriétés, l'onglet propriétés devrait contenir votre treeview propriétés. En haut, il devrait être un foudre gras icône, cliquez sur l'icône. À partir de la liste ci-dessous, sélectionnez "SelectedNodeChanged" et double cliquez dessus. Que devriez-vous prendre à votre code-behind. Alors essayer le code que j'ai posté ci-dessus pour obtenir le nœud sélectionné de texte. J'ai juste essayé ce dans un projet de test et il a parfaitement fonctionné
OriginalL'auteur Jeff Turner