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).
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 <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>
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?
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; } }
J'espère avoir été clair. Merci d'avance de votre aide
Partager