Hello,
j'affiche un tableau de droits au moyen d'un repeater
pour chaque ligne, on a le nom d'un objet puis 3 checkbox qui indique chacune un droit différent
Comment faire pour savoir quel checkbox sur quel ligne a été modifiée ?
Merci !
Hello,
j'affiche un tableau de droits au moyen d'un repeater
pour chaque ligne, on a le nom d'un objet puis 3 checkbox qui indique chacune un droit différent
Comment faire pour savoir quel checkbox sur quel ligne a été modifiée ?
Merci !
Hello,
Tu peux essayer de mettre un OnItemCommand dans ton repeater. Ca marche pour un click sur un boutton, mais je suis pas certain que ca ira pour des CheckBox.
Sinon, faire qqch dans le style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 foreach ( RepeaterItem Item in TonRepeater.Items ) { if ( ((CheckBox)Item.FindControl("IDCheckBox")).Checked ) { // Action lorsque ta CheckBox "checké" } }
Evectivement dans la fonction ItemCommand du repeater, mais moi je ferais:
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 Private Sub tonRepeater_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles tonRepeater.ItemCommand Dim chb As CheckBox chb = CType(e.CommandSource, CheckBox ) Select Case chb.ID Case "IDCheckBox1" 'traitement CheckBox1 Case "IDCheckBox2" 'traitement CheckBox3 Case "IDCheckBox3" 'traitement CheckBox2 End Select
Oui en fait la 2ème méthode c'était au cas ou le OnItemCommand ne marchait pas sur des CheckBox, et qu'après avoir fait un choix l'utilisateur cliquait sur un bouton ( en dehors du Repeater ), et c'est dans l'événement click du bouton qu'on aurait fait le foreach.
C'était peut-être pas très clair....
Ok, ya qqchose particulier à faire sur le repeater ou sur les checkbox ?
j'ai bien le postback=true sur mes checkbox mais le RepeaterDroitsUtil_ItemCommand n'est pas exécuté...
Merci de votre aide
Ton Repeater ressemble à ca ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part <asp:repeater id="rePanier" runat="server" enableviewstate="true" onitemcommand="rePanier_ItemCommand">
Mon repeater :
il y un item et alternateitem
Code : Sélectionner tout - Visualiser dans une fenêtre à part <asp:Repeater ID="RepeaterDroitsUtil" runat="server" enableviewstate="true" OnItemCommand="RepeaterDroitsUtil_ItemCommand">
Une Checkbox :
dans le code behind :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <asp:CheckBox ID="CheckBoxConsult" runat="server" Checked="true" AutoPostBack="true" />
merci de ton aide
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 Protected Sub RepeaterDroitsUtil_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs) Handles RepeaterDroitsUtil.ItemCommand Dim message As String = "RepeaterDroitsUtil_ItemCommand" Response.Write("<body><script>alert(""" & message & """);</script></body>") Dim chb As CheckBox chb = CType(e.CommandSource, CheckBox) Select Case chb.ID Case "IDCheckBox1" 'traitement CheckBox1 Case "IDCheckBox2" 'traitement CheckBox3 Case "IDCheckBox3" 'traitement CheckBox2 End Select
comment faire alors ?
Moi je mettrais un bouton et dans l'événement Clik le code que je t'avais donné avant avec la boucle foreach.
oui mais le problème, c'est que je peut avoir 60 lignes et qu'à ce moment là c'est pas génial niveau execution.
Une solution en C# (je te laisse traduire):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <asp:CheckBox AutoPostBack=True ID="cb" Runat=server Checked='<%#(bool) (Container.DataItem) %>'> </asp:CheckBox> <br> </ItemTemplate> </asp:Repeater>çà marche
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 private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { bool []b = {true,false,true}; Repeater1.DataSource = b; Repeater1.DataBind(); } } private void InitializeComponent() { this.Repeater1.ItemCreated += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemCreated); this.Load += new System.EventHandler(this.Page_Load); } private void Repeater1_ItemCreated(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { CheckBox cb; cb = (CheckBox)e.Item.FindControl("cb"); cb.CheckedChanged +=new EventHandler(cb_CheckedChanged); } private void cb_CheckedChanged(object sender, EventArgs e) { CheckBox cb=(CheckBox)sender; if(cb.Checked) { this.Response.Write("Checked "+cb.ClientID+"<br>"); } else { this.Response.Write("Unchecked "+cb.ClientID+"<br>"); } }
P.S.: inspiré un truc trouvé avec google, mais j'ai perdu le lien.. Testé et approuvé![]()
Je suis désolé, mais ça marche pas...
je dois avoir un truc qui va pas mais en c# je vois rien.
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
60
61
62 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script runat="server"> private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { bool []b = {true,false,true}; Repeater1.DataSource = b; Repeater1.DataBind(); } } private void InitializeComponent() { this.Repeater1.ItemCreated += new System.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemCreated); this.Load += new System.EventHandler(this.Page_Load); } private void Repeater1_ItemCreated(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { CheckBox cb; cb = (CheckBox)e.Item.FindControl("cb"); cb.CheckedChanged +=new EventHandler(cb_CheckedChanged); } private void cb_CheckedChanged(object sender, EventArgs e) { CheckBox cb=(CheckBox)sender; if(cb.Checked) { this.Response.Write("Checked "+cb.ClientID+"<br>"); } else { this.Response.Write("Unchecked "+cb.ClientID+"<br>"); } } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Repeater id="Repeater1" runat="server"> <ItemTemplate> <asp:CheckBox AutoPostBack=True ID="cb" Runat=server Checked='<%#(bool) (Container.DataItem) %>'> </asp:CheckBox> <br> </ItemTemplate> </asp:Repeater> </div> </form> </body> </html>
Merci de ton aide
J'ai trouvé un truc qui marche nickel, qui fait pas une boucle et qui marche avec plusieurs CheckBox![]()
dans le repeater, la CheckBox :
dans le code-behind :
Code : Sélectionner tout - Visualiser dans une fenêtre à part <asp:CheckBox ID="CheckBoxConsult" runat="server" Checked="true" OnCheckedChanged="Checkbox_Clic" AutoPostBack="true" />
c'est tout ! c'est pas beau quand c'est tout simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Protected Sub Checkbox_Clic(ByVal sender As Object, ByVal e As System.EventArgs) Dim cbk As CheckBox = CType(sender, CheckBox) Dim dgItem As RepeaterItem = CType(cbk.NamingContainer, RepeaterItem) Response.Write("<body><script>alert(""" & dgItem.ItemIndex.ToString() & cbk.ID.ToString & cbk.Checked & """);</script></body>") End Sub
Moir je t'ai donnée la même chose mais en code behind, sauf que moi j'avais essayé ton truc et çà marchait pas (j'ai du faire çà trop vite).
Pense au [Résolu]
Partager