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 :

Récupération valeur dans une gridview présente dans un repeater


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut Récupération valeur dans une gridview présente dans un repeater
    Bonjour,
    j'ai encore un souci avec ma gridview présente dans mon repeater.

    Voici le contexte:
    j'ai créé un repeater composé d'un label et d'une gridview. cette gridview est composée de 3 colonnes : le nom du role, et 2 colonnes permettant de savoir si un utilisateur donné (celui chargé dans le formulaire) appartient à ce role.
    Il y a 2 colonnes car c'est le seul moyen que j'ai trouvé pour à la fois charger correctement les données et ainsi avoir les checkbox cochées au bon moment, mais aussi afin de pouvoir cocher/décocher ces checkbox (avec uniquement <asp:BoundField DataField="isInRole" />, impossible d'avoir un accès en écriture et de créer un événement sur la modification du check).

    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
     
    <asp:Repeater id="rpApplis" runat="server" onitemdatabound="rpApplis_ItemDataBound">    
                <ItemTemplate>
                    <table width="100%">
                   <tr>
                        <td style="font-weight:bold;">
                        <asp:Label ID="lblAppliName" runat="server" Text="<%# (('Namespace'.Application)Container.DataItem).Name  %>"></asp:Label>
                        <br />
                        </td> 
                   </tr>
                   <tr>
                        <td>
                            <asp:GridView ID="gvRoles" runat="server" AutoGenerateColumns="False" style="background-color:#D4E0FF;">
                        <Columns>
                            <asp:BoundField DataField="Name"/>
                            <asp:BoundField DataField="isInRole"  />
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:CheckBox ID="isInRole2" runat="server" OnCheckedChanged="cbRole_OnCheckedChanged" AccessKey='<%# Eval("Name").ToString() %>' Checked='<%# Convert.ToBoolean(Convert.ToByte(Eval("isInRole"))) %>'/>
                                </ItemTemplate>
                            </asp:TemplateField>
                            </Columns>
                            </asp:GridView>
                        </td> 
                   </tr>
                  </table>
         </ItemTemplate>
         <SeparatorTemplate>
              <br>
         </SeparatorTemplate>
     
    </asp:Repeater>
    Voici le code behind pour le chargement de mon repeater :

    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
     
    protected void rpApplis_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if((e.Item.ItemType == ListItemType.Item)||(e.Item.ItemType == ListItemType.AlternatingItem))
                {
    //Création de la Gridview
                    GridView myGvRole = (GridView)e.Item.FindControl("gvRoles");
                    AdLdsRoleProvider newRoleProvider = (AdLdsRoleProvider)Roles.Providers["AdLdsRoleProvider"];
    //Récupération de la liste des roles pour l'application donnée
                    List<'Namespace'.Providers.Group> appliRoles = newRoleProvider.GetRolesForApplication((('Namespace'.Providers.Application)e.Item.DataItem).Name);
    //Création d'une datatable qui servira de source à la gridview
                    DataTable dt = new DataTable();
    //Création des colonnes
                    DataColumn col2 = new DataColumn("isInRole", typeof(Boolean));
                    DataColumn col1 = new DataColumn("Name", typeof(string));
                    dt.Columns.Add(col1);
                    dt.Columns.Add(col2);
    //Rajout d'une ligne pour chaque role
                    foreach ('Namespace'.Providers.Group role in appliRoles)
                    {
                        DataRow dr = dt.NewRow();
                        dr["Name"] = role.Name;
    //Valeur du booléen isInRole : est ce que l'utilisateur a ce role?
                        if ((this.userIGG != null) && (this.userIGG != string.Empty))
                        {
                            dr["isInRole"] = newRoleProvider.IsUserInRole(this.userIGG, role.Name);
                        }
                        else
                            dr["isInRole"] = false;
     
                        dt.Rows.Add(dr);
                    }
    //Binding
                    myGvRole.DataSource = dt;
                    myGvRole.DataBind();
    //Affichage
                    myGvRole.HeaderRow.Visible = false;
                    myGvRole.Columns[1].Visible = false;
     
                }
            }
    Ma gridview (et l'ensemble du repeater) sont donc correctement alimentés. Maintenant je souhaite pouvoir récupérer la liste des roles dont la valeur de la checkbox va etre modifée. Pour cela je pensais utiliser l'événement cbRole_OnCheckedChanged comme vous pouvez le voir dans le code de ma page. ependant, je ne sais pas comment récupérer la valeur du role dont la checkbox est cochée/décochée. Est il possible de passer en paramètre la valeur de ce role lors du cochage/décochage?

    J'espère avoir été clair. Merci d'avance de votre aide

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Bonjour,

    As-tu essayé de de mettre OnItemCommand sur le repeater ?

    Ça permettra de remonté l'évènement cbRole_OnCheckedChanged et de récupérer ler sender avec tout ses paramètres. En gros ça ferais quelque chose de ce genre la :

    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
    <asp:Repeater id="rpApplis" runat="server" onitemdatabound="rpApplis_ItemDataBound" onitemcommand="rpApplis_ItemCommand" >    
                <ItemTemplate>
                    <table width="100%">
                   <tr>
                        <td style="font-weight:bold;">
                        <asp:Label ID="lblAppliName" runat="server" Text="<%# (('Namespace'.Application)Container.DataItem).Name  %>"></asp:Label>
                        <br />
                        </td> 
                   </tr>
                   <tr>
                        <td>
                            <asp:GridView ID="gvRoles" runat="server" AutoGenerateColumns="False" style="background-color:#D4E0FF;">
                        <Columns>
                            <asp:BoundField DataField="Name"/>
                            <asp:BoundField DataField="isInRole"  />
                            <asp:TemplateField>
                                <ItemTemplate>
                                    <asp:CheckBox ID="isInRole2" runat="server" OnCheckedChanged="cbRole_OnCheckedChanged" AccessKey='<%# Eval("Name").ToString() %>' Checked='<%# Convert.ToBoolean(Convert.ToByte(Eval("isInRole"))) %>'/>
                                </ItemTemplate>
                            </asp:TemplateField>
                            </Columns>
                            </asp:GridView>
                        </td> 
                   </tr>
                  </table>
         </ItemTemplate>
         <SeparatorTemplate>
              <br>
         </SeparatorTemplate>
     
    </asp:Repeater>
    et dans le behind :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected void rpApplis_ItemCommand(object sender, RepeaterCommandEventArgs e)
    {
           CheckBox _box = (CheckBox)e.CommandSource;
     
           if(_box != null)
           {
                // normalement tu a accès à l'ensemble des paramètres 
           }
    }
    PS : J'ai fait le code à la volé désolé pour les erreurs

Discussions similaires

  1. [Débutant] Affichage des valeurs d'une DropDownList imbriqué dans un GridView
    Par informer dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/04/2013, 05h19
  2. [MySQL] Utiliser la valeur d'un limit présent dans une table
    Par gwena54 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 02/07/2007, 21h08
  3. Réponses: 14
    Dernier message: 24/05/2006, 16h05
  4. Telecharger une image présente dans une BDD à partir de PHP
    Par guillaumeIOB dans le forum Bibliothèques et frameworks
    Réponses: 58
    Dernier message: 02/04/2006, 15h42
  5. afficher la valeur d'une variable contenue dans une DB
    Par titoumimi dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 17h00

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