asp:Repeater : Comment mettre un "CommandArgument" ?

asp:Repeater : Comment mettre un "CommandArgument" ? - C#/.NET managed - Programmation

Marsh Posté le 27-10-2005 à 17:09:11    

Bonjour,
 
J'utilise un "Repeater" afin d'afficher le résultat d'une requête.
Sauf que je voudrais pouvoir cliquer sur une ligne, et à partir de là, récupérer des infos sur la ligne cliquée...
 
Et je fais ça comment ?
Je voudrais éviter de passer par un bête "<a href>" parceque j'ai besoin de faire des contrôles avant d'envoyer le tout.
J'ai donc mis un "<asp:LinkButton>", et ça marche. Sauf que je n'arrive pas à mettre d'info dans le "CommandArgument", et du coup je suis bloqué là...
 
Si je met "<%# DataBinder.Eval(Container.DataItem, "codsoc" ) %>" en CommandArgument, ça plante.
 

Code :
  1. <asp:Repeater ID="MyRepeater" Runat="server">
  2.    <HeaderTemplate>
  3.     <table>
  4.      <tr>
  5.       <th>
  6.        Code</th>
  7.       <th>
  8.        Société</th>
  9.       <th>
  10.        Droit</th>
  11.      </tr>
  12.    </HeaderTemplate>
  13.    <ItemTemplate>
  14.     <tr>
  15.      <td><%# DataBinder.Eval(Container.DataItem, "codsoc" ) %></td>
  16.      <td><asp:LinkButton Runat="server" CommandName="Soc" OnCommand="LaunchSoc"><%# DataBinder.Eval(Container.DataItem, "libut_soc" ) %></asp:LinkButton></td>
  17.      <td><%# DataBinder.Eval(Container.DataItem, "typtie" ) %></td>
  18.     </tr>
  19.    </ItemTemplate>
  20.    <FooterTemplate>
  21.     </table>
  22.    </FooterTemplate>
  23.   </asp:Repeater>

Reply

Marsh Posté le 27-10-2005 à 17:09:11   

Reply

Marsh Posté le 28-10-2005 à 11:11:04    

et donc ?

Reply

Marsh Posté le 28-10-2005 à 14:07:29    

Tu peux pas modifier le CommandArgument ds le ItemDataBound du Repeater ?

Reply

Marsh Posté le 28-10-2005 à 15:16:41    

Euh, faut que je vois ce que c'est :D
 
A vrai dire, je découvre pas mal ce genre de choses. J'essaie d'utiliser un maximum les outils du FrameWork (pour la première fois j'ai réussi à utiliser un WebControl :bounce:) mais je n'avais jamais utilisé ces trucs avant. Je créais mes propres objets, basés sur des éléments HtmlElements, en faisant tout à la main.
 
Là, je suis en train d'installer Oracle client. D'ici une petite heure, je vais voir ce dont tu me parles :)

Reply

Marsh Posté le 28-10-2005 à 15:20:11    

Groumpf, à priori y'a pas de Client sur aucun des 3 CD de Oracle 9iAS V9.0.1 :D
 
Relou, je vais trouver ça où ? La dernière chance, y'a aussi un Oracle V8.1.7. J'espère qu'il est compatible .NET sinon je suis comme un con.
 
Fait chier de devoir faire 25 trucs à la fois...

Reply

Marsh Posté le 28-10-2005 à 15:28:50    

Quelle idée aussi de bosser avec Oracle ... :D

Reply

Marsh Posté le 28-10-2005 à 16:59:47    

OK, je vois comment ça marche.
 
Par contre,c'est quoi comme Objet un "DataItem" d'un DataSet ?
 

Code :
  1. protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
  2.  {
  3.   if(e.Item.ItemType == ListItemType.Item)
  4.   {
  5.    DataRow dr = ((DataRow) e.Item.DataItem);
  6.    string codsoc = ((string) dr["codsoc"]);
  7.    ((LinkButton) e.Item.FindControl("linkSoc" )).CommandArgument = codsoc;
  8.   }
  9.  }


 
=> Ca plante sur le :

Code :
  1. DataRow dr = ((DataRow) e.Item.DataItem);

Reply

Marsh Posté le 28-10-2005 à 17:02:45    

WhyMe a écrit :

Quelle idée aussi de bosser avec Oracle ... :D


 
Ben j'y peux rien, ce site web tape dans la base d'un ERP, et cet ERP tourne avec Oracle :spamafote:
 
D'un autre côté, c'est pratique, j'ai pas à m'emmerder à faire un modèle des données et des procédures de réplication des données... Là je tape directement dedans comme un goret :sol:
 
Sauf que j'arrive pas à installer le client. Chais pas si c'est TSE qui fait ça, mais en local (Windows 2003 Entreprise Edition SP1) je peux lancer l'install d'Oracle 8.1.7 (qui contient le client), mais sur le serveur via bureau à distance (Windows 2003 Standard Edition SP1) je ne peux pas...
C'est balo, parceque du coup je suis obligé de continuer à bosser sur mon portable...


Message édité par Arjuna le 28-10-2005 à 17:03:12
Reply

Marsh Posté le 28-10-2005 à 17:17:37    

Bon, à force de bidouiller, j'ai fini par utiliser un DataTable au lieu d'un DataSet, et je peux récupérer un DataRowView (pkoi pas un DataRow tout court, mystère)

Reply

Marsh Posté le 28-10-2005 à 17:50:11    

ouf !
 
J'ai enfin réussi !
(j'en ai mis du temps à trouver qu'il fallait en plus prendre le type d'item "alternatingitem" )
 

Code :
  1. protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
  2.  {
  3.   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  4.   {
  5.    DataRowView dr = ((DataRowView) e.Item.DataItem);
  6. //    TableRow tr = new TableRow();
  7. //    TableCell td = new TableCell();
  8. //    td.Text = ((Decimal) dr["codsoc"]).ToString();
  9. //    tr.Cells.Add(td);
  10. //    td = new TableCell();
  11. //    LinkButton link = new LinkButton();
  12. //    link.CommandArgument = ((Decimal) dr["codsoc"]).ToString() + "." + ((string) dr["typtie"]);
  13. //    link.CommandName = "linkSoc";
  14. //    link.Command += new CommandEventHandler(this.LaunchSoc);
  15. //    link.Text = ((string) dr["libut_soc"]);
  16. //    td.Controls.Add(link);
  17. //    tr.Cells.Add(td);
  18. //    td = new TableCell();
  19. //    td.Text = ((string) dr["typtie"]);
  20. //    tr.Cells.Add(td);
  21. //    e.Item.Controls.Add(tr);
  22.    ((LinkButton) e.Item.FindControl("linkSoc" )).CommandArgument = ((Decimal) dr["codsoc"]).ToString() + "." + ((string) dr["typtie"]);
  23.   }
  24.  }

Message cité 1 fois
Message édité par Arjuna le 28-10-2005 à 17:50:26
Reply

Marsh Posté le 28-10-2005 à 17:50:11   

Reply

Marsh Posté le 06-06-2007 à 09:17:50    

Petit pb pour ma part concernant ton code... Je sais que ca fait vieux, mais sait on jamais...
J'ai repris le meme principe, mais impossible d'accéder à ma commande...
 
Si j'ai bien compris, sur click de ton bouton tu declenches ta procedure LauncSoc, avec les param adequates... Personnellement, je n'y passe jamais... La seule chose que je declenche est le page_load...
 
As tu une idée ?
 
Merci d'avance
 
 

Arjuna a écrit :

ouf !
 
J'ai enfin réussi !
(j'en ai mis du temps à trouver qu'il fallait en plus prendre le type d'item "alternatingitem" )
 

Code :
  1. protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
  2.  {
  3.   if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
  4.   {
  5.    DataRowView dr = ((DataRowView) e.Item.DataItem);
  6. //    TableRow tr = new TableRow();
  7. //    TableCell td = new TableCell();
  8. //    td.Text = ((Decimal) dr["codsoc"]).ToString();
  9. //    tr.Cells.Add(td);
  10. //    td = new TableCell();
  11. //    LinkButton link = new LinkButton();
  12. //    link.CommandArgument = ((Decimal) dr["codsoc"]).ToString() + "." + ((string) dr["typtie"]);
  13. //    link.CommandName = "linkSoc";
  14. //    link.Command += new CommandEventHandler(this.LaunchSoc);
  15. //    link.Text = ((string) dr["libut_soc"]);
  16. //    td.Controls.Add(link);
  17. //    tr.Cells.Add(td);
  18. //    td = new TableCell();
  19. //    td.Text = ((string) dr["typtie"]);
  20. //    tr.Cells.Add(td);
  21. //    e.Item.Controls.Add(tr);
  22.    ((LinkButton) e.Item.FindControl("linkSoc" )).CommandArgument = ((Decimal) dr["codsoc"]).ToString() + "." + ((string) dr["typtie"]);
  23.   }
  24.  }



Reply

Marsh Posté le 06-06-2007 à 09:32:54    

Il faut bien utiliser l'event "OnCommand" et non "OnClick"


Message édité par MagicBuzz le 06-06-2007 à 09:34:51
Reply

Sujets relatifs:

Leave a Replay

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