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:
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:
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