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

ASP.NET Discussion :

Petite question concernant le GridView


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut Petite question concernant le GridView
    Bonjour,

    Je vous explique : j'ai une page qui affiche un controle type Calendar. Lorsque l'utilisateur clic sur une date, en fonction de son login et de son statut enregistré en session, une DropDownList s'affiche et un GridView se remplit selon une requête. Bien sur, si l'utilisateur clic sur quelque chose dans la DropDownLis, le GridView actualise les données pour la même date.

    Le truc, c'est que mon GridView affiche automatiquement un colonne Modifier dans lequel, pour chaque ligne, il y a un lien hypertexte "Modifier" qui mène vers une autre page en passant un numéro en paramètre.

    J'aimerais que en comparant un numéro enregistré en session avec un numéro retourné par la requête qui donne les données au GridView, je puisse choisir si oui on non, j'affiche le lien Hypertexte "Modifier" pour cet ligne.

    Je débute un peu en ASP.NET et je n'ai aucune idée de comment faire
    Quelqu'un peut m'aider svp ? Même une petite piste me serait utile.

    Merci de toutes réponses qui pourra m'aider,

    Cordialement,
    Wizard50

  2. #2
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Le plus simple est de rajouter l'evenement RowDataBound au GridView

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.GridView1.RowDataBound += new GridViewRowEventHandler(GridView1_RowDataBound);
    Ensuite dans la méthode qui est appellé lors du DataBind() pour chaque ligne, vérifier si la condition est vrai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected void CollectionGridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
          if (e.Row.RowType == DataControlRowType.DataRow)
          {
               //Recupere le numero de la requete
               int numRequete = Int32.Parse((DataRowView)e.Row.DataItem).Row["numRequete"]);
               //Si le numero est different de la session, alors on efface le texte
               //Cells[i] ou i correspond à la colonne du CommandField
               if (numRequete != Int32.Parse(Session["numSession"].ToString()))
                      e.Row.Cells[0].Text = String.Empty;
           }
    }

  3. #3
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut
    Bon je pense comprendre ta méthode Cependant, j'obtiens un bon message d'erreur avec mon code :
    La valeur ne peut pas être null. Nom du paramètre : string.
    Voici le code de ma méthode qui remplit le GridView :

    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
     
        protected void RemplirListeRecording()
        {
            CodeClassroom = DropDownList1.SelectedItem.Value;
     
            if (IsPostBack)
            {
                txtJourneyDate = (string)ViewState["txtJourneyDate"];
                CodeClassroom = DropDownList1.SelectedItem.Value;
                this.GridView1.RowDataBound += new GridViewRowEventHandler(CollectionGridView1_RowDataBound);
            }
     
                try
                {
                    this.GridView1.EmptyDataText = "Pas d'évènements disponible pour cette journée";
                    this.Etq_Date_Choisis.Text = "Evènements disponible pour le " + txtJourneyDate;
     
                    Req = "SELECT NORECORDING, to_char(DATE_START_RECORDING,'HH24:MI') AS Date_Start, to_char(DATE_FINISH_RECORDING,'HH24:MI') AS Date_Finish, LIBELLER, NOTEACHER ";
                    Req += "FROM RECORDING ";
                    Req += "WHERE CODECLASSROOM ='" + CodeClassroom + "'";
                    Req += "AND to_char(DATE_START_RECORDING,'DD/MM/YYYY') LIKE '" + this.txtJourneyDate + "'";
     
                    Cmd = new OracleCommand(Req, Cnx);
                    Jdd = Cmd.ExecuteReader();
                    this.GridView1.DataSource = Jdd;
                    this.GridView1.DataBind();
                    Jdd.Read();
                    noRequete = Jdd[4].ToString();
                    Jdd.Close();
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message.ToString());
                }
        }
    Puis le code de CollectionGridView1_RowDataBound()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        protected void CollectionGridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
          if (e.Row.RowType == DataControlRowType.DataRow)
          {
            if (Int32.Parse(noRequete) != Int32.Parse(noTeacher))
            {
                e.Row.Cells[4].Text = string.Empty;
            }
           }
        }
    Merci de ton aide
    Elle m'est bien précieuse

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Par défaut
    demande toi d'où viennent les valeurs de tes variables noRequete et noTeacher

    relis le code fournis par User.Anonymous et regarde comment il récupère les informations depuis la grid et depuis la session.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int numRequete = Int32.Parse((DataRowView)e.Row.DataItem).Row["numRequete"]);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Int32.Parse(Session["numSession"].ToString()

  5. #5
    Membre actif
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Par défaut
    C'est justement sa le truc : j'ai bien suivi ce qu'a dit User.Anonymous en apportant les modifications nécessaires.
    Car en effet, le numéro que je récupère de ma requête qui construit le GridView, je ne l'affiche pas dans le GridView

    Application

    Voici la première ligne de ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Req = "SELECT NORECORDING, to_char(DATE_START_RECORDING,'HH24:MI') AS Date_Start, to_char(DATE_FINISH_RECORDING,'HH24:MI') AS Date_Finish, LIBELLER, NOTEACHER ";
    Dans mon GridView, j'affiche Date_Start, Date_Finish, Libeller; puis j'aimerais récupérer le NOTEACHER de chaque ligne et le comparer au contenu de la variable NoTeacher qui contient ma variable de session, et ainsi afficher ou non le lien Hypertexte "Modifier" dans la cellule.

    Je pense pourtant avoir initialiser le RowDataBound au bonne endroit mais il semblerait que non ...

    Merci de ta réponse en tout cas

  6. #6
    Membre confirmé
    Inscrit en
    Août 2007
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 174
    Par défaut
    Et comme ca, ca ne marches pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
               //Recupere le numero de la requete
               int numRequete = Int32.Parse((DataRowView)e.Row.DataItem).Row["NOTEACHER"]);
               //Si le numero est different de la session, alors on efface le texte
               //Cells[i] ou i correspond à la colonne du CommandField
               if (numRequete != Int32.Parse(Session["NoTeacher"].ToString()))
                      e.Row.Cells[0].Text = String.Empty;
    Ton "NOTEACHER" est unique a chaque ligne donc ce sera forcement dans la méthode RowDataBound que tu pourra recuperer celui correspondant à ta ligne.

    Je pense pourtant avoir initialiser le RowDataBound au bonne endroit mais il semblerait que non ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.GridView1.RowDataBound += new GridViewRowEventHandler(GridView1_RowDataBound);
    A mettre dans Page_Init ou Page_Load, sinon à déclarer dans la feuille .aspx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Petite question concernant la notation utilisée dans une requête
    Par jlb59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/01/2008, 09h40
  2. Petite question concernant Upnp
    Par lolblablatos dans le forum Web & réseau
    Réponses: 1
    Dernier message: 19/11/2007, 22h07
  3. Petite question concernant la boite d'alimentation
    Par pop10 dans le forum Composants
    Réponses: 2
    Dernier message: 06/11/2007, 19h07
  4. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  5. Réponses: 11
    Dernier message: 21/06/2005, 10h16

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