IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Gérer l'évènement OnClick


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut Gérer l'évènement OnClick
    Bonjour,

    Je réalise un TreeView à partir de ce tutoriel: http://www.codeproject.com/KB/aspnet/ajax_treeview.aspx.

    J'ai bien mon arborescence avec des données issues de ma base. Maintenant je voudrais effectuer des actions lorsque l'utilisateur clique sur les noeuds (remplir une dropdownlist).

    J'ai l'intuition qu'il faut gérer l'évènement OnClick dans TreeView.ascx.cs mais cette classe dérive de UserControl, qui ne propose pas cette méthode. Suis-je au moins sur la bonne voie?

    Merci de votre aide!

    la classe TreeView.ascx.cs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Collections.Generic;
     
    public partial class TreeView : System.Web.UI.UserControl
    {
        private Tree tree;
     
        /// <summary>
        /// Tree to display in the control
        /// </summary>
        public Tree DisplayTree
        {
            get { return tree; }
            set { tree = value; }
        }
     
        private bool delayLoad = true;
     
        /// <summary>
        /// Set delay load if the output of the tree should be 
        /// staged using AJAX techniques.
        /// </summary>
        public bool DelayLoad
        {
            get { return delayLoad; }
            set { delayLoad = value; }
        }
     
     
        protected void Page_Load(object sender, EventArgs e)
        {
            if (DisplayTree == null)
                throw new HttpException("DisplayTree must not be null in tree build.");
     
            // Store the tree data in the session to allow access at treefill time. 
            if (delayLoad)
                Session["tree" + DisplayTree.ID] = DisplayTree;
        }
     
        protected override void Render(HtmlTextWriter writer)
        {
            // Reference javascript for AJAX behaviour and tree toggling
            writer.Write("<script language=\"javascript\" type=\"text/javascript\" src=\"../../scripts/TreeToggle.js\"></script>");
     
            // Write the root node
            DisplayTree.Root.WriteNode(writer, DisplayTree.ID, delayLoad);
        }
     
    }

  2. #2
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    tu étais sur la voie...
    Tu gères l'évènement click et puis tu te sert de la propriété selectedNode de ton treeview...
    C'est pas plus compliqué que ça.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut Comment gérer onClick?
    Justement je ne sais pas comment m'y prendre pour gérer l'évènement click : dans mon TreeView.ascx.cs, je tape "protected override" et l'éditeur ne me propose pas onClick. Par où je commence?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 62
    Points : 69
    Points
    69
    Par défaut Evènement
    Je pense qu'il faut que tu utilises l'évènement NodeMouseClick de ton treeview.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    OK merci il faut que je crée un évènement personnalisé apparemment. J'ai trouvé ça : http://morpheus.developpez.com/usercontrols/#LIV-A.

    J'ai ajouté ça dans TreeView.ascx.cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public delegate void NodeClickHandler(object sender, EventArgs e);
        [Category("Configuration"), Browsable(true), Description("Evènement associé au click sur un noeud")]
        public event NodeClickHandler NodeClick;
     
    protected virtual void OnNodeClick(EventArgs e)
        {
            //remplir une ddl
     
        }
    Par contre pour appeler OnNodeClick()... Dans mon treeview les actions sont faites en javascript (Toggle, DelayLoadNode):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
        /// <summary>
        /// Output the HTML to render a node and optionally fill in its children.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="treeID"></param>
        /// <param name="delayLoad"></param>
        public void WriteNode(HtmlTextWriter writer, string treeID, bool delayLoad)
        {
            // Work out which of plus, minus or empty to show.
            String plusImg = "../../../images/plus.gif";
            if (this.Children.Count == 0)
                plusImg = "../../../images/transparent.gif";
            else if (this.expanded)
                plusImg = "../../../images/minus.gif";
     
            // Show the child if it is expanded
            String displayChild = "block";
            if (!this.Expanded)
                displayChild = "none";
     
            // Set up for the delay load call if the node is not loaded at this time
            string expand = String.Format("javascript:Toggle('{0}');", this.ID);
            if (!this.expanded && delayLoad)
                expand = String.Format("javascript:DelayLoadNode('{0}', '{1}');", treeID, this.ID);
     
            writer.Write("<table border=\"0\" cellpadding=\"1\" cellspacing=\"1\"><tr>");
            writer.Write(String.Format("<td width=\"16\"><a id=\"P{0}\" href=\"{1}\">", this.ID, expand));
            writer.Write(String.Format("<img src='img/{0}' width='16' height='16' hspace='0' vspace='0' border='0'/>", plusImg));
            writer.Write("</a></td>");
            writer.Write(String.Format("<td nowrap=\"true\"><a id=\"P{0}\" href=\"{1}\">{2}</a>", this.ID, expand, this.Text, "</td>"));
            writer.Write("</table>");
     
            // Content holder for the child nodes
            writer.Write(String.Format("<div style=\"display:{1};margin-left:2em\" id=\"D{0}\">", this.ID, displayChild));
     
            // And do the children only if we are not delay loading.
            if (!delayLoad)
            {
                foreach (TreeNode child in this.Children)
                {
                    child.WriteNode(writer, treeID, delayLoad);
                }
            }
     
            writer.Write(String.Format("</div>"));
        }
    Comment je peux faire?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Finalement je me dirige plutôt vers javascript car le déclenchement de l'évènement click me rafraichit la page.

    J'ai un WebService (pour récupérer des données) que je voudrais appeler en javascript dans la fonction Toggle mais là je galère... Je cherche mais si quelqu'un a une piste je ne dis pas non!

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 13h15
  2. [Débutant][C#] Comment gérer les événements ?
    Par aDamas dans le forum Windows Forms
    Réponses: 11
    Dernier message: 14/12/2005, 00h16
  3. [Swing]gérer un événement sur un JTextField
    Par madina dans le forum Composants
    Réponses: 3
    Dernier message: 22/11/2005, 11h56
  4. Réponses: 5
    Dernier message: 25/07/2005, 09h29
  5. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo