Click sur un noeud d'un treview ASP net 2.0

Résolu
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005 - 19 août 2004 à 23:53
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 26 août 2004 à 00:56
Bonjour à tous

Puis - je avoir un fragment de code (ou une idée!!!) pour simuler un clik sur un arbre net 2.0?
Merci d'avance

Net_Amateur

52 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
24 août 2004 à 00:26
Voici enfin le code commenté :
Je suis passé en Code Behind pour profiter des +- pour retrecir le code

Default2.aspx





Untitled Page







































Default2.aspx.vb



Imports Microsoft.VisualBasic

Public Class Default2_aspx

#Region " Demarrage de la page "

'Méthode activé au chargement de la page
Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

' on regarde Request.Form("__EVENTTARGET") = LinksTreeView.ClientID & "Checked"
' en effet, lors du PostBack par un clique sur un CheckBox
' je fais apré javascript appelle à la fonction __doPostBack(LinksTreeView.ClientID & "Checked",ValuePath du noeud du checkbox)
' la fonction __doCallBack assigne son premier paramètre à la valeur de
' et la deuxieme valeur à "__EVENTARGUMENT" c'est ainsi que fonctionne le PostBack
If Request.Form("__EVENTTARGET") = LinksTreeView.ClientID & "Checked" Then

' on Déclare un TreeNode, et on lui demande de chercher le node grace à la fonction
' TreeNodeJustChecked qui donne en paramètre pour collection de noeud la collection de noeud
' du treeview, et pour ValuePath Request.Form("__EVENTARGUMENT")
Dim TheNode As TreeNode = TreeNodeJustChecked(LinksTreeView.Nodes, Request.Form("__EVENTARGUMENT"))

' Au cas où le noeud n'est pas retrouvé sa valeur sera nulle, on ne pourra pas se servir de Thenode
If TheNode IsNot Nothing Then

' on assigne un message suivant la valeur du noeud
If TheNode.Checked Then
Message.Text = "Le PostBack de la page à été généré en cochant " & TheNode.Text
Else
Message.Text = "Le PostBack de la page à été généré en décochant " & TheNode.Text
End If

Else
' Si le noeud n'a pas été trouvé, on se sert de la seule information que
' l'on a a notre disposition : Request.Form("__EVENTARGUMENT") qui contient le ValuePath
' du noeud qui a été coché/décoché, et donc via une manipulation de chaine on peut recuperer
' le texte du noeud cliqué, mais on ne peut pas savoir si le Checkbox a été coché ou décoché
'
' (On pourrait le savoir en modifiant le PostBack, est plutot que faire __doPostBack
' avec pour premier argument LinksTreeView.ClientID & "Checked", on mettrait le nom
' du Checkbox et on pourrait arriver à connaitre des infos en faisant un Request.Form
' de l'id du Checbox, mais c'est pas utile, et ca compliquerais le script)
Message.Text = "Le PostBack de la page à été généré par" & Request.Form("__EVENTARGUMENT").Split(System.Convert.ToChar("/"))(Request.Form("__EVENTARGUMENT").Split(System.Convert.ToChar("/")).Length - 1)
End If

End If

End Sub

#End Region

#Region " Clique sur le Checkbox "
' Normalement il n'est pas necessaire de modifier quelque chose ici

' Sert pour connaitre le TreeNode que l'on vient juste de cocher/decocher
' Demande en paramètre une collection de noeud, et le nodePath par exemple : Table of Contents/Chapter Two/Section 2.0
' A partir de la collection de noeud, on va regarder tout ses noeuds enfants, jusqu'a en trouver un
' possedant le meme NodePath, c'est une fonction recurrente
' La fonction retourne nothing si le noeud n'est pas trouvé
Private Function TreeNodeJustChecked(ByVal NodeColl As TreeNodeCollection, ByVal NodePath As String) As TreeNode
' Si la collection de noeud est vide, on retourne nothing et on part
If NodeColl.Count = 0 Then
Return Nothing
Exit Function
End If

' Pour Chaque noeud de la collection
For Each Node As TreeNode In NodeColl

' si le noeud courant a des noeuds enfants
If Not Node.ChildNodes.Count = 0 Then
'Noeud temporaire : appelle de la fonction recurrente
' avec les noeuds enfants, et le valuepath recherché
Dim _TreeNodeJustChecked As TreeNode = TreeNodeJustChecked(Node.ChildNodes, NodePath)

' si la variable temporaire n'est pas nul, c'est à dire si le noeud à été trouvé
' on a gagné !!! on retourne le noeud trouvé et on part
If _TreeNodeJustChecked IsNot Nothing Then
Return _TreeNodeJustChecked
Exit Function
End If
End If

' si le value path du noeud courant et le meme que la value path recherché
' on a gagné !!! on retourne le noeud courant et on part
If Node.ValuePath = NodePath Then
Return Node
Exit Function
End If

Next

' si on est pas partis dans la boucle for c'est qu'on a pas trouvé le noeud dans cette
' collection de noeud dans ce cas : on retourne Nothing
Return Nothing

End Function

' Méthode activé lors de l'initiation du TreeView
' Le code suivant aurait aussi pu etre dans le Page_Load
' mais ca place est plus ici, vu qu'il sert pour l'initialisation de la page
Sub LinksTreeView_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinksTreeView.Init

' Je rajoute cette ligne au cas ou le Treeview soit invisible,
' en effet, si visible = false, il n'y aura pas le code generé
' est donc lorsque qu'avec javascript je vais appeller les checkbox
' ils vont pas etre trouvé, et une erreur javascript va m'etre retourné
If LinksTreeView.Visible Then

' Variable Script qui sert au stockage de tout le script javascript que l'on va inserer
Dim Script As String
' Ces quelques lignes sert à dire quel langage on va utiliser et une ligne
' et l'autres sert pour les anciens navigateurs ne connaissant pas javascript
Script = "" & vbNewLine
Script &= " " & vbNewLine
Script &= ""

' ici on indique que notre treeview a besoin de la fonction PostBack
' cette ligne ne sert à rien car le treeview necessite deja le postback
' mais c'est un bon reflexe à prendre car ce n'est pas le cas de tout les controles
' cette ligne sert donc juste à rajouter ce code javascript, s'il n'est pas présent :
'
'
'
' J'ai besoin de cette fonction pour effectuer le postback par les Checkbox
Page.RegisterRequiresPostBack(LinksTreeView)

' ici on enregistre le script, et donc l'insere dans la page
' la fonction necessite le script et l'id "CheckBoxLinksTreeView" dans notre cas
ClientScript.RegisterStartupScript(LinksTreeView.GetType, "CheckBox" & LinksTreeView.ClientID, Script)
End If

End Sub

' Premiere version de writeScript, c'est de celui ci que je me sert, j'aurais pu m'en servir
' directement dans le LinksTreeView_init, mais ca me faisait rajouter une variable 0, et ca faisait pas joli
' cette variable 0 est indispensable au bon fonctionnement de la fonction
' lorsqu'on appelle cette fonction, on appelle la deuxieme version de WriteScript avec le paramètre 0
Private Function WriteScript(ByVal NodeColl As TreeNodeCollection, ByVal IDTreeview As String) As String
Return WriteScript(NodeColl, IDTreeview, 0)
End Function

' WriteScript est la fonction qui genere le code javascript
' elle demande en paramètre une collection de noeud l'id du treeview et un integer
' c'est une fonction recurrente : qui s'appelle elle meme
' la variable i est un compteur pour compter le nombre de noeud,
' et surtout dans quelle noeud on se situe
' Comme c'est une fonction recurrente, qu'on appelle pour tout les noeud du Treeview
' et qu'il n'y a qu'un seul compteur, et bien sur que l'on ne doit pas reinitialiser à chaque noeud
' i est une valeur par reference
' j'ai besoin d'un compteur car j'ai remarqué, que les Checkbox avait un nom
' et la seule difference entre les noms de tout les noeud du treeview était un chiffre
' le name du checkbox est de la forme : IDTreeView & "n" & Compteur & "CheckBox" ==> LinksTreeViewn0CheckBox par exemple
Private Function WriteScript(ByVal NodeColl As TreeNodeCollection, ByVal IDTreeview As String, ByRef i As Integer) As String

' si le noeud dans leque on est vide, on part
' les 4 lignes sont équivalentes à l'unique ligne
'If NodeColl.Count = 0 Then
' i += 1
' Return ""
' Exit Function
'End If
If NodeColl.Count = 0 Then i += 1 : Return "" : Exit Function

'Variable temporaire, qui contiendra le script de la collection de noeud en cours
Dim _WriteScript As String = ""

' pour chaque noeud de la collection en cours
For Each Node As TreeNode In NodeColl

' si le Checkbox est present
' c'est à dire qu'on execute le code seulement si il y a une case à cocher
If Node.ShowCheckBox Then

'Code pour les bons navigateurs comme Firefox ;) '_WriteScript &" theForm." & IDTreeview & "n" & i & "CheckBox.onclick function(){"
'_WriteScript &= "__doPostBack("
'_WriteScript &= """" & IDTreeview & "Checked"""
'_WriteScript &= ","
'_WriteScript &= """" & Node.ValuePath & """"
'_WriteScript &= " )};" & vbNewLine

'Code esperé pour IE6 SP1
' C'est donc le code javascript pour un seul noeud, c'est ici que
' tout le travail javascript repose
' on a besoin du compteur pour savoir quelle checkbox appellé
' on a egalement besoin de l'id du treeview _WriteScript &" theForm." & IDTreeview & "n" & i & "CheckBox.onclick " & IDTreeview & "n" & i & vbNewLine
_WriteScript &= "function " & IDTreeview & "n" & i & "(){"
_WriteScript &= " __doPostBack("
_WriteScript &= """" & IDTreeview & "Checked"""
_WriteScript &= ","
_WriteScript &= """" & Node.ValuePath & """"
_WriteScript &= " ) };" & vbNewLine & vbNewLine

End If

' on incremente notre compteur de 1 aussi bien pour les noeud avec checkbox que sans
i += 1

' si le noeud courrant a des noeuds enfants, on va appeller WriteScript
' que l'on ajoute à notre variable temporaire _WriteScript
' on lui passe en paramètres, les noeuds enfants
' l'id du treeview et notre compteur, qui va s'incrementer par reference
' c'est à dire que si maintenant i = 2 apres l'appel i ne sera plus égal à 2
' c'est cette condition qui constitue la recurrence
If Not Node.ChildNodes.Count = 0 Then _WriteScript &= WriteScript(Node.ChildNodes, IDTreeview, i)

'Noeud suivant ...
Next

' on retourne notre variable temporaire contenant tout le code javascript,
' generé pour tout les noeuds enfant de la collection de noeud courante
Return _WriteScript

End Function

#End Region

#Region " Clique sur le lien "

' Méthode activée lorsque l'utilisateur clique sur le lien
' On affiche un message indiquant sur quel lien on a cliqué
Private Sub LinksTreeView_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinksTreeView.SelectedNodeChanged
Message.Text = "Vous avez selectionné : " & LinksTreeView.SelectedNode.Text
End Sub

#End Region

End Class


J'ai un peu modifié le code, j'ai enlevé des trucs inutiles, renommer certains trucs, car en le commentant j'ai vu que ca servait à rien

si il y a encore des trucs que tu comprends pas, dis le moi.
mais si tu es nouveau en asp.net, et que tu ne connait pas le fonctionnement des Postback, ca risque d'etre assez compliqué, de comprendre pour toi
Mais j'ai essayé d'expliquer assez bien, et j'espere ne pas trop t'embrouiller
--> Bon courage ;)

J'espere que cette fois ca marchera !!! moi ca marche toujours aussi bien avec tout mes navigateurs

essaye ce code, est dis moi stp que ca marche :) car la je sature d'idée :-p

Sinon pour l'erreur Javascript que tu m'as donné lorsque tu cliques sur un "-" j'ai vu l'erreur, et ca m'a bien fait rire, car l'erreur etait présente avant que je modifie le code, c'est donc Microsoft qui en est responsable : bug corrigé avec la version finale je l'espere :big)

j'attend avec impatience ta reponse, en esperant avoir un cri de victoire :approve)

@+

Cyril
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 01:36
Je comprend pas trop ce que tu entend pas simuler un click, voici un bout de code qui pourra peut etre t'etre utile :

Sub TreeView1_SelectedNodeChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TreeView1.SelectedNodeChanged

End Sub

J'espere t'avoir un peu aidé :)

Avis perso :
Je viens de tester ce controle, car je commence juste à me mettre à asp.net 2.0 et j'aime pas car j'utilise FireFox est ca marche pas :'( je suis décu, j'espere que ce sera corrigé dans la version finale, sinon je ferais tout pour ne pas utiliser ce control, c'est dommage car il paraissait bien et puissant [:@]

@+

Cyril
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
20 août 2004 à 17:46
Dans la belle et vieille version de VB6 je profitais de l'événement click rattaché aux noeuds d'un treeview pour écrire des routines événementielles (et gérer ainsi les choix d'utilisateur).
Cet événement n'est pas transposé dans la version net pour le développement d'applications Web et, maintenant, je ne sais pas trop quelle marche suivre!
En ce qui concerne System.EventArgs .. j'ai pas bcp de choix non plus.
J'ai essayé ceci:
........................................
Sub TestChecked(ByVal sender As Object, ByVal e As TreeNodeEventArgs)
If e.Node.Checked Then
Label1.Text = "OK!"
End If
End Sub
........................................

.....................................................................
Sans résultat!
Ni erreur, ni affichage de mon message!
Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 18:25
tu pourrais m'expliquer exactement ce que tu veux, car la j'ai un peu de mal à te suivre.

Je veux bien essayer de te guider : tu peux si tu veux dans TestChecked ajouter :

dim Tn as Treenode = ctype(sender, treenode)
id Tn.checked then
Lbl1.Text = "Ok!"
end if

mais je ne sais pas et je ne pense pas que ca marche, car je suis pas du tout sur du type de Tn
J'ai aucune documentation sur asp.net 2.0 je nage un peu dans le vide :) et donc je peux pas faire grand chose avant d'avoir trouvé de la doc (je vais chercher)
l'evenement OnCheckChanged est generé quand ? en voyant checked je pensais trouvé un CheckBoxLike mais rien de tel, et je ne vois pas ce qui pourrait etre Checked, c'est lorsque l'on clique sur le + ou - ? j'ai pas l'impression car il n'y a pas de postback sur ces evenements.

j'aimerais donc savoir ce que t'aimerais faire précisement, je pense que tu veux réagir lorsque l'utilisateur fait quelque chose mais je ne sais pas quoi :)
Pendant ce temps moi je vais voir si je trouve de la doc sur ce treeview

@+

Cyril
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
20 août 2004 à 19:21
Au fait:
"dim Tn as Treenode = ctype(sender, treenode)
if Tn.checked then
Lbl1.Text = "Ok!"
end if "
et
"If e.Node.Checked Then
Label1.Text = "OK!"
End If
"
sont équivalentes!!!

Voilà schématiquement ce que je veux:
1) Je construis un arbre à deux niveaux hierarchiques:
* niveau 1 : Catégories
* niveau 2: Produits
Bien sur Catégories et Produits reliées par une relation.

2) Résultat: Plus que satisfaisant! Arbre correctement construit.
3) Je veux capturer sur un click (ou en cochant la case à cocher rattachée au noeud fille) la valeur du node.text et node.Value.
Ce qui s'avère ... impossible!

Suis je clair?

... et merci bcp pour ton effort!
Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 20:11
:)
Oui j'ai enfin compris ce que tu veux faire.

Malheureusement comme je l'ai dit plus haut, je ne connais pas le treeview.

Peut tu vite fait me dire comment tu fais pour ajouter un case à cocher ? mais je pense que la n'est pas le problème :)

Je vais regarder comment faire ca, ce soir, qd j'aurais le temps, car j'ai tj pas eu le temps de regarder des infos sur le treeview

mais je pense qu'il n'y a rien de sorcier :)

Par contre qd tu dis que Ctype(sender,treenode) est identique à e.Node, j'en doute fortement, en es tu sur ? si c'est le cas, alors pourquoi mettre deux parametres, alors qu'un seul aurait suffit ? si je me rappelle bien mes bouquins :) tout les evenements des controls ont le meme schema : onEvents(sender as object, e as EventArgs)
sender sert pour dire quel control a declencher le postback et e et euh .... un argument :big) je me sers rarement de e donc je peux pas t'expliquer exactement, mais je sais que c'est un argument qu'on peut envoyer grace au controls

et je pense donc que tu pourras recuperer les valeurs que tu veux grace à sender plutot que e

Je regarde ca tout à l'heure, car la je vais manger :)

Cyril
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
20 août 2004 à 22:32
Pour les cases à cocher... problème résolu! Mais ca ne me suffit pas. Le click?
Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 23:05
Je venais juste de voir les cases à cocher :)

Je peux voir le code ?

pour le click je vais regarder ca :)

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
20 août 2004 à 23:18
Voici je pense un code qui va t'aider :





Sub LinksTreeView_CheckChanged(ByVal sender As Object, ByVal e As TreeNodeEventArgs)

If LinksTreeView.CheckedNodes.Count > 0 Then


' Clear the message label.
Message.Text = "You selected:

"

' Iterate through the CheckedNodes collection and display
' the selected nodes.
Dim node As TreeNode

For Each node In LinksTreeView.CheckedNodes

Message.Text &= node.Text & "
"

Next

Else

Message.Text = "No items selected."

End If

End Sub

Sub Select_Change(ByVal sender As Object, ByVal e As EventArgs)

Message.Text = "You selected: " & LinksTreeView.SelectedNode.Text

End Sub





Untitled Page




TreeView CheckChanged Example




























































j'ai enfin eu le temps de chercher ou trouver de l'aide, cet exemple est tiré de l'aide du rassemblement des deux evenements.

Grace à ta question, j'ai pu me rendre compte de la puissance de ce control, j'espere juste qu'il marchera avec tout les navigateurs pour la version finale

@+

Cyril
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
20 août 2004 à 23:32
Je me suis inspiré du même exemple! Voilà:
1. La procédure:

Sub TestChecked(ByVal sender As Object, ByVal e As TreeNodeEventArgs)
If TreeRF.CheckedNodes.Count > 0 Then

Label1.Text = ""
Dim node As TreeNode

For Each node In TreeRF.CheckedNodes

Label1.Text &= node.Text & "
"

Next

Else

Message.Text = "Aucune case cochée!"

End If
2. Design:
<html>

<form id="Form1" runat="server">


Diagnosis Maker













<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD"></SelectedNodeStyle>

<Nodes>



</Nodes>
<NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black"></NodeStyle>


















</form>

</html>

P.S. De toute manière pas de problèmes pour Netscape 7, FireFox et IE 6.0
Net_Amateur
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
21 août 2004 à 00:03
Mais mon problème n'est pas résolu!!! J'ai besoin de récuperer des données après chaque choix de l'utilisateur.
Ne pas autoriser l'utilisateur de faire plusieurs choix (plusieurs cases à cocher) avant validation!!! Donc un événement du genre click ferait l'affaire!

Alors Cyril?

Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 00:31
tu veux recuperer l'evenement qd l'utilisateur clique sur un checkbox ?
a quoi sert alors ton Checkbox ?

tu voudrais gerer l'evenement CheckedClick ? car pour l'instant l'evenement CheckChanged "Occurs when a check box in the TreeView control changes state between posts to the server. " donc ne s'execute pas lorsque l'on clique sur le checkbox.

l'evenement OnSelectedNodeChanged ne te convient pas ? il s'active lorsque l'on clique sur le text

je regarde un petit exemple, et je te montre tout ca :)

@+

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 00:41
Essaye le code ci dessous, je sais pas si ca va te satisfaire ou pas, mais je pense que c'est à peu pres ce que tu veux :)

j'ai essayé de griser la checkbox plutot que de la faire disparaitre mais j'ai pas trouvé comment faire, et ca doit etre tres compliqué (et je suis fatigué) mais si c'est ce que tu veux, ca peut se faire via javascript, sans meme trop de pb (Je viens de penser comment on pourrait faire ca :))

 

<%@ Page Language="VB" %>
<script runat="server">

    Sub Select_Change(ByVal sender As Object, ByVal e As EventArgs)
'On inverse la valeur de la case à cocher true <=> false        
LinksTreeView.SelectedNode.ShowCheckBox = Not LinksTreeView.SelectedNode.ShowCheckBox
        LinksTreeView.SelectedNode.Checked = Not LinksTreeView.SelectedNode.Checked
        
        'Message 
        Message.Text = "You selected: " & LinksTreeView.SelectedNode.Text

    End Sub

</script>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>

    <form id="Form1" runat="server">
        
            <Nodes>
                
                    
                        
                            
                            
                            
                            
                            
                            
                        
                        
                        
                    
                
            </Nodes>
        
        

        

        
    </form>

</html>


Cyril
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
21 août 2004 à 01:10
Je pense qu'une solution qui va ds ce sens pourrait convenir!

Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 01:20
ok

et la qu'est-ce qu'il ne convient pas ? :)

Moi je vais bientot aller me coucher, donc je regarderais ca demain

Bonne nuit

@+

Cyril
0
cs_Dorutu Messages postés 39 Date d'inscription vendredi 13 août 2004 Statut Membre Dernière intervention 11 mars 2005
21 août 2004 à 14:03
L'idéal pour moi serait d'avoir un AutoPostBack pour les événements OnSelect et OnNodeCheckChanged !

Je sais que pour toi ce n'est pas sorcier... étant donné que pour Web t'en es un!!

Net_Amateur
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 14:24
lol

le OnSelect je pense que c'est facile, c'est l'évenement OnSelectedNodeChanged qui lui declenche un postback par contre, ce serait possible en faisant beaucoup de javascript, mais ca va etre difficile
ce que j'aimerais savoir c'est pourquoi tu veux des evenements differents ? ca vaut vraiment la peine de s'embeter à créer un nouvel evenement ?

Je sais pas si tu es familier avec asp.net, mais si tu veux vraiment avoir un evenement onNodeCheckChanged, va falloir dériver ton treeview etc ... c'est loin d'etre simple

mais si c'est ce que tu as envie, je pourrais bien essayer de t'expliquer comment faire

Cyril

PS : c'est mon millieme post sur le forum :d
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 14:45
Je viens de regarder, et ca doit etre tres tres compliqué : il faut limite recoder tout le treeview :)

Le problème qu'il se pose, c'est que " 'MyTreeNode' cannot inherit from class 'TreeNode' because 'TreeNode' is declared 'NotInheritable'. "

Je voulais dériver un TreeNode pour avoir le controle sur le checkbox mais malheureusement Trennode est NotInheritable

Donc a moins que tu te sens pret à recoder tout le treeview (moi je me sens pas encore tout de suite capable (mais fait par moi il sera firefox compatible [:d])) donc je pense qu'il vaut mieux chercher une autre solution.

Ce que tu veux c'est bien avoir un evenement lorsque l'on clique sur le checkbox et un autre lorsque l'on clique sur le lien ?

J'ai pas d'idées qui me viennent, mais je vais reflechir

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 15:02
Encore une tentative à l'eau :

Dim Tn As TreeNode
Tn = LinksTreeView.Nodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(0).ChildNodes.Item(0)
Tn.Text = "Coucou !!! 1.0.1 "

Je pensais qu'il existait une propriété pour ecrire de l'html dans le treenode, ben non, il y a pas moyen, il encode tout les caractères.
Pour ton problème je vois malheureusement que 2 solutions soit on recode tout le treeview :big) soit on fait tout ca en 100% javascript.

Je m'explique pour 100% javascript.
Je connais pas javascript mais je sais que c'est possible.

Le code HTML d'un treenode est :
<td nowrap="nowrap">
[javascript:__doPostBack('LinksTreeView','sTable of Contents\\Chapter One\\Section 1.0\\Topic 1.0.1') Topic 1.0.1]</td>

avec javascript (et des heures de patience) on peut atteindre la balise TD à partir de la, on peut ajouter un checkbox au text et on pourra aussi rajouter le postback via javascript, le plus compliqué dans ce script c'est d'atteindre la balise du treenode, et ca je suis incapable de le faire, il faudrais que je me replonge dans un bouquin de javascript etc ...

Donc voila tout ce que je peux faire, si tu arrives à atteindre la balise du treenode, je pourrais ensuite rajouter le textbox via javascript mais sinon peut pas faire grand chose de plus

donc voila ton problème a une solution, mais les solutions que j'ai trouvés sont extrement complexe, donc j'espere que tu arriveras à faire ce que tu veux autrement

bon courage

@+

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
21 août 2004 à 16:07
J'ai des bonnes nouvelles :)

comme ton truc m'enervait, et que j'aime pas resté sur un echec, je me suis un peu acharné sur le truc, et je me suis rendu compte que le checkbox possédait l'attribut name :big) a partir de là rien de plus simple que d'aller modifier via javascript le click

donc voila pour l'instant ou j'en suis :





function Page_Load()
{
document.Form1.LinksTreeViewn3CheckBox.setAttribute("onClick", "CaMarche()");
//document.getElementByID("Cyril").innerText = "CaMarche()";
}

function CaMarche()
{
alert("Ca marche !!!");
}




Sub Select_Change(ByVal sender As Object, ByVal e As EventArgs)
'LinksTreeView.SelectedNode.ShowCheckBox = True
'On inverse la valeur de la case à cocher true false
LinksTreeView.SelectedNode.Checked = Not LinksTreeView.SelectedNode.Checked

'Message
Message.Text = "You selected: " & LinksTreeView.SelectedNode.Text

End Sub





Untitled Page































Teste ca, tu risques surement de trouver ca un peu nul si tu connais pas comment faire un postback a partir de javascript, mais à partir de la, je peux travailler :) il reste que des choses simples à faire en javascript, apres en asp.net il y aura un peu de code mais bon ce sera pas grand chose, on va pas reinventer le Treeview tout de suite :)

donc voila, la je m'en vais m'aerer mais ce soir ton problème sera je pense résolu

sur ce bon week end

Cyril
0
Rejoignez-nous