[ASP.NET] Datagridview et Radiobuttonlist

Datagridview et Radiobuttonlist [ASP.NET] - C#/.NET managed - Programmation

Marsh Posté le 09-06-2009 à 16:50:53    

Bonjour,
 
J'ai un petit probleme.
 
J'ai créé un Datagridview dans lequel j'ai ajouté une colonne contenant une RadiobuttonList de 3 Radiobuttons.
 
Maintenant, je veux que les radiobutton soient selectionnés en fonction de la valeur d'une colonne d'une table d'une base de données SQL Server et que lorsque que le user valide, la bdd soit mise à jour
 
donc d'un coté j'ai ma page .aspx avec mes radio buttons et de l'autre ma bdd
le probleme c'est que j'arrive pas a acceder aux radiobutton dans la gridview. (et donc à faire la liaison entre les la bdd et la page .aspx)
 
Je code en ASP.NET/c# sous framework .NET 2.0
Lorsque je veux acceder a la datagridview dans le fichier .cs, je peux
mais quand je veux acceder au radiobutton, impossible !  
 
je pensais utiliser la methode FindControl(string) pour acceder a ma radiobuttonliste mais comment manipuler ce control pour verifier quel radiobutton est selectionné?
 
Je sais pas si je suis trés clair
Merci de votre aide


Message édité par fatloui le 01-07-2009 à 11:18:50
Reply

Marsh Posté le 09-06-2009 à 16:50:53   

Reply

Marsh Posté le 01-07-2009 à 11:19:00    

vu que je n'ai pas resolu mon problème, je retente un dernier petit up

Reply

Marsh Posté le 01-07-2009 à 13:44:36    

Merci Fred82, tu me sauves la vie aujourd'hui.
 
Je vais me pencher la dessus et je te tiendrais au courant ^^

Reply

Marsh Posté le 07-07-2009 à 18:57:32    

tu peux récupérer normalement le controle Radio par la propriété Control de chaque cellule en question.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 08-07-2009 à 10:59:14    

j'ai du mal à comprendre le principe du control (le msdn est pas tres explicite)

Reply

Marsh Posté le 08-07-2009 à 12:13:22    

A mon avis si tu utilise une GridView, il faudra que tu utilse des TemplateField dans la définition des colonnes.
 
Puis Binder les champs de ta source avec un scriplet du genre:
      <asp:RadioButton id="StatutOK" Runat="server" Checked='<%# (bool)DataBinder.Eval(Container.DataItem, "Champbooleen" ) %>'   AutoPostBack="True"  OnCheckedChanged="ClickRadioButton" >
      </asp:RadioButton>


Message édité par ov3rflow le 08-07-2009 à 12:14:04
Reply

Marsh Posté le 08-07-2009 à 13:22:00    

oui mais ca ca fonctionne dans le cas d'un radiobutton mais pas pour une radiobuttonlist :(

Code :
  1. <asp:RadioButtonList ID="Etat" CellSpacing="10" RepeatDirection="Horizontal"
  2.            runat="server" OnSelectedIndexChanged="Check_Radio">
  3.            <asp:ListItem Selected="True"></asp:ListItem>
  4.            <asp:ListItem ></asp:ListItem>
  5.            <asp:ListItem></asp:ListItem>   
  6.            </asp:RadioButtonList>


 
le probleme c'est que dans ma fonction "check_radio" je vois pas comme acceder au radiobutton (vu qu'ils ont pas de nom)

Reply

Marsh Posté le 08-07-2009 à 14:22:23    

ben en fait j'arrive pas a acceder à Etat car il est dans une gridview
 
je pensais que GriView1.Etat aurait marché mais en fait non

Reply

Marsh Posté le 08-07-2009 à 15:26:12    

ah ok.
Je teste ca
 
Merci ^^

Reply

Marsh Posté le 10-07-2009 à 10:10:40    

Tu as un évènement onRowDataBound(sender,e) lié à ton contrôle DataGridView.
 

Code :
  1. protected void dlDocumentK_ItemDataBound(object sender, DataListItemEventArgs e)
  2. {
  3.             Label lbID = (Label)e.Item.FindControl("lbIDK" );
  4.             ImageButton btUpdate = (ImageButton)e.Item.FindControl("btUpdateK" );
  5.             btUpdate.CommandArgument = lbID.Text;
  6.             ImageButton btDelete = (ImageButton)e.Item.FindControl("btDeleteK" );
  7.             btDelete.CommandArgument = lbID.Text;
  8. }



---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Marsh Posté le 10-07-2009 à 10:10:40   

Reply

Marsh Posté le 10-07-2009 à 10:28:41    


 
non en fait ici mon object sender est la datagridview pas Etat

Code :
  1. <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
  2.             DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333"
  3.             Height="454px" Width="580px"
  4.             onselectedindexchanged="GridView1_SelectedIndexChanged" >
  5.             <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
  6.             <RowStyle BackColor="#EFF3FB" HorizontalAlign="Center" />
  7.            
  8.             <Columns>
  9.                 <asp:BoundField DataField="Domaine" HeaderText="Domaine"
  10.                     SortExpression="Domaine" />
  11.                 <asp:BoundField DataField="Service" HeaderText="Service"
  12.                     SortExpression="Service" />
  13.                      <asp:TemplateField HeaderImageUrl="Etat.bmp" >
  14.            <ItemTemplate>
  15.            <asp:RadioButtonList ID="Etat" CellSpacing="10" RepeatDirection="Horizontal"
  16.            runat="server" OnSelectedIndexChanged="Check_Radio">
  17.            <asp:ListItem Selected="True"></asp:ListItem>
  18.            <asp:ListItem ></asp:ListItem>
  19.            <asp:ListItem></asp:ListItem>   
  20.            </asp:RadioButtonList>     
  21.                </ItemTemplate>
  22.                </asp:TemplateField> 
  23.             </Columns>         
  24.             <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
  25.             <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
  26.             <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
  27.             <EditRowStyle BackColor="#2461BF" />
  28.             <AlternatingRowStyle BackColor="White" />
  29.         </asp:GridView>


 

bpoujol a écrit :

Tu as un évènement onRowDataBound(sender,e) lié à ton contrôle DataGridView.


Je vais regarder de ce coté la mais j'avoue que pour le moment c'est un peu obscure ce code
 

Message cité 1 fois
Message édité par fatloui le 10-07-2009 à 10:33:02
Reply

Marsh Posté le 10-07-2009 à 10:40:55    

fatloui a écrit :


Je vais regarder de ce coté la mais j'avoue que pour le moment c'est un peu obscure ce code


 
 
 

Code :
  1. 1protected void dlDocumentK_ItemDataBound(object sender, DataListItemEventArgs e)
  2. {
  3.             2Label lbID = (Label)e.Item.FindControl("lbIDK" );
  4.             3ImageButton btUpdate = (ImageButton)e.Item.FindControl("btUpdateK" );
  5.             4btUpdate.CommandArgument = lbID.Text;
  6. }


 
1L'item on rowDataBound est appelé dès que une ligne est "bindé" sur la GridView.
En gros sur ton exemple : le gv est rempli par ta dataSouce "SQLdataSource1", à chaque fois qu'il écrit une ligne, il lève l'évènement.
 
2Tu recupère le contrôle dont tu veux évaluer la valeur
 
3Tu recupère le contrôle dont tu veux modifier la valeur dans ton cas  
RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("Etat" );
4Tu modifie ton contrôle  
rbl.Items[0].Checked


---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Marsh Posté le 10-07-2009 à 11:14:38    

merci ^^
je commence à y voir plus clair
 
parcontre, il me semble que on rowDataBound se declare  
protected void GridView1_bind(object sender, GridViewRowEventArgs e)
 
et non pas
protected void GridView1_bind(object sender, DataListItemEventArgs e)
 
du coup j'ai tenté  

Code :
  1. protected void GridView1_Bound(object sender, GridViewRowEventArgs e)
  2.         {
  3.             Label1.Text = "ici";
  4.                        
  5.             RadioButtonList rbl = (RadioButtonList)e.Row.FindControl("Etat" );
  6.             rbl.Items[0].Selected = true;
  7.            
  8.         }


 
Mais ca ne fonctionne pas car l'objet "is not found" et du coup je suis un peu perdue aussi

Reply

Marsh Posté le 10-07-2009 à 11:22:40    

fatloui a écrit :

merci ^^
je commence à y voir plus clair
 
parcontre, il me semble que on rowDataBound se declare  
protected void GridView1_bind(object sender, GridViewRowEventArgs e)
 
et non pas
protected void GridView1_bind(object sender, DataListItemEventArgs e)
 


 
Tout a fait, faute de frappe (je n'ai pas de Visual Studio sous les yeux).
Bizarre qu'il ne trouve pas le contrôle...


---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Marsh Posté le 10-07-2009 à 11:31:25    

j'ai tenté
 

Code :
  1. RadioButtonList rbl = new RadioButtonList();
  2.             rbl = (RadioButtonList)e.Row.FindControl("Etat" );
  3.             rbl.Items[0].Selected = true;


 
et ca aussi

Code :
  1. RadioButtonList rbl = new RadioButtonList();
  2.             rbl = (RadioButtonList)GridView1.FindControl("Etat" );
  3.             rbl.Items[0].Selected = true;


 
ca me donne toujours la meme erreur : La référence d'objet n'est pas définie à une instance d'un objet.
 
J'ai du faire une erreur au niveau de la declaration


Message édité par fatloui le 10-07-2009 à 11:31:41
Reply

Marsh Posté le 13-07-2009 à 10:18:45    

alors en fait ca fonctionne mais ca me genere une erreur a la fin

Code :
  1. RadioButtonList rbl = (RadioButtonList)e.Row.FindControl("Etat" );
  2. try{           
  3.     rbl.Items[0].Selected = true;
  4. }
  5. catch{
  6.      Label1.Text = "ici";
  7. }


Il me met tous les radiobutton de la rangée 0 à true et Label1 prend le text "ici"
 
c'est bizarre mais ca fonctionne.
 
Par contre,
mon objectif est qu'à la chargement de la page, les radiobuttons prennent une position en fonction d'une base de donnée => Ca marche nikel en utilisant

Code :
  1. RadioButtonList rbl = (RadioButtonList)GridView1.Rows[i].FindControl("Etat" );
  2.                     if (etat == 1)
  3.                     {
  4.                         rbl.Items[0].Selected = true;
  5.                     }
  6. etc


 
Par contre je veux que lorsque le user valide, les données de la bdd soient mises à jour

Code :
  1. rq = "UPDATE matable SET Etat = 3 WHERE ID = " + j;
  2.                     sql = new SqlCommand(rq, cx_indic);
  3.                     sql.ExecuteNonQuery();
  4.                     RadioButtonList rbl = (RadioButtonList)GridView1.Rows[i].FindControl("Etat" );
  5.                
  6.                     if (rbl.Items[0].Selected == true)
  7.                     {
  8.                         rq = "UPDATE matable SET Etat = 1 WHERE ID = " + j;
  9.                         sql = new SqlCommand(rq, cx_indic);
  10.                         sql.ExecuteNonQuery();
  11.                     }
  12. etc


Ca fonctionne aussi (la connexion à la bdd se passe nikel) sauf que rbl.Items[0].Selected ne prend pas la nouvelle valeur de la page mais celle qui etait au chargement de la page.
En clair :
initialement : rbl.Items[0].Selected == true , le user coche le 2eme radio button (logiquement rbl.Items[0].Selected == false et rbl.Items[1].Selected == true)
sauf que lorsque le user click sur valider, rbl.Items[0].Selected == true  
 
Je vois pas d'ou vient le probleme

Reply

Marsh Posté le 15-07-2009 à 16:03:30    

Mon probleme est resolu (en partie)
 
en fait j'avais declaré ma radiobuttonlist sur la page aspx comme ca

Code :
  1. <asp:RadioButtonList ID="Etat" CellSpacing="10"
  2.            RepeatDirection="Horizontal"
  3.            runat="server">
  4.            <asp:ListItem></asp:ListItem>
  5.            <asp:ListItem></asp:ListItem>
  6.            <asp:ListItem></asp:ListItem>   
  7.            </asp:RadioButtonList>


 
Et chaque fois que je validais, il me selectionnait tous les 1er radiobutton
 
et maintenant  

Code :
  1. <asp:RadioButtonList ID="Etat" CellSpacing="10"
  2.            RepeatDirection="Horizontal"
  3.            runat="server">
  4.            <asp:ListItem Text="Sourire"></asp:ListItem>
  5.            <asp:ListItem Text="Vert"></asp:ListItem>
  6.            <asp:ListItem Text="Rouge"></asp:ListItem>   
  7.            </asp:RadioButtonList>


Il ne fait plus ce qu'il veut et laisse le radio button selectionné à true (et non pas le premier)
Merci pour votre aide ^^


Message édité par fatloui le 15-07-2009 à 16:29:35
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed