Dans mon code C#, je n’arrive pas a recuperer ce control Checkbox pour remettre la proprietes Checked a false quand je rafraichis le datagrid.
J’ai vu des solutions mais trop complexes a on gout (creation de ma propre classe herite de Datagrid, etc) , je suis sur qu’il existe une solution simple (enfin j’espere !)
Tu peux esssayer de rajouter
protected System.Web.UI.WebControls.CheckBox CheckAll;
dans tes variables, et si c’est le bon type (j’utilise pas les controles <asp:) tu vas pouvoir y acceder direct (asp.net va automatiquement la lier a celle sur ta page).
Tu as essayé du côté de la propriété .Controls de ton objet datagrid ? Sinon il existe une méthode sur ton this (Page) pour chercher un contrôle à partir de son ID (il me semble).
Réponse de mémoire, donc susceptible de ne pas être rigoureusement exacte
[quote]Control ‹ CheckAllCriteria › of type ‹ CheckBox › must be placed inside a form tag with runat=server.
…
[HttpException (0x80004005): Control ‹ CheckAllCriteria › of type ‹ CheckBox › must be placed inside a form tag with runat=server.]
System.Web.UI.Page.VerifyRenderingInServerForm(Control control) +152
System.Web.UI.WebControls.CheckBox.Render(HtmlTextWriter writer) +40
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +72
System.Web.UI.Control.Render(HtmlTextWriter writer) +7
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Page.ProcessRequestMain() +1929[/quote]
le code ne plante pas, c’est lors de l’affichage de la page que ca merde, pourtant, le tag runat=« server » est bien la et je ne me suis pas trompe dans le nom de la checkbox…
Bon, j’ai regardé vite fait, en fait j’ai l’impression qu’il ne reste que 2 solutions :
Tu as vraiment besoin d’avoir un controle dans le header de ta colonne, tu fais une classe qui implémente ITemplate et tu l’utilises en codebehind pour gérer l’affichage de ta colonne.
Un simple javascript peut faire l’affaire (par ex. si tu veux faire le coup de la checkbox pour cocher toutes les checkbox de la colonne, comme je le soupçonne), et dans ce cas pourquoi se priver ? Surtout que j’ai trouvé qq exemples assez facilement sur google si programmer du js t’embête.
J’utilise deja du javascript pour cocher/decocher toutes les cases et ca ca marche au poil.
Ce que je fais lors du chargement de la page, c’est que je recupere dans un BD les cases qui doivent etre cochees ou decochees et donc je coche et decoche les bonnes checkbox de mon tableau dans le code C# de la page.
La cerise sur le gateau aurai ete que je coche aussi celle qui est dans mon header lorsque je m’appercois par exemple que toutes les checkbox sont cochees
Alors je pourrai faire un truc barbare en javascript qui tel un bourrin de viking pourrai a chaque refresh de la page scrutter le formulaire et verifier toutes les checkbox pour cocher celle qui s’appelle « CheckAll » quand il faut.
Mais j’aime pas les methode de vikings
1 / Solution sale : une datagrid génère une table et donc par déduction dans la hierarchie … mais bon c’est carrement dégeux comme méthode
2 / Solution propre :
[code]public class MaSuperPage : System.Web.Page
{
// On déclare un champ privé
private CheckBox CheckAll;
// On rajoute un event handler sur l’évènement ItemCreated de la Datagrid
…
this.DataGrid1.ItemCreated += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemCreated);
//…
// Dans l’Event Handler on récupère la checkbox
private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
CheckAll = (CheckBox) e.Item.FindControl(“CheckAll”);
}
}[/code]
Bon courage !
[quote name=‘Vko’ date=’ 26 Apr 2005, 16:26’]2 / Solution propre :
…[/quote]
Oui, c’est bien, mais j’ai envie de dire que tu es en train de définir une datagrid spécialisée avec un checkall qui fait bel et bien partie de la grid et de rien d’autre, donc la solution vraiment propre (et qui simplifie le code) est de faire une CheckDataGrid : DataGrid qui expose un bool CheckAll et qui a une valeur par défaut pour la headerTemplate qui contient la checkbox (ça se fait en créant un classe qui implémente ITemplate). Ça peut te permettre de tout mettre dans un truc réutilisable, javascript compris…