[ASP.Net / C# ]Checkbox et Controls

Checkbox et Controls [ASP.Net / C# ] - C#/.NET managed - Programmation

Marsh Posté le 19-05-2008 à 16:17:36    

Bonjour,
 
Dans une page asp.net  de type modification de formulaire, j'ai plusieurs onglets :
- le premier, ne comporte que des textbox et une liste déroulante, et ne me pose pas problème
- le second, comporte une liste de checkbox à cocher, et me pose problème
- en bas de cette page, j'ai des boutons me permettant de sauvegarder les modifications ou de les annuler
 
Le problème que je rencontre, est que lors du premier chargement de ma page, les checkbox sont "ajoutés" à ma page, mais pas aux Controls de cette page, alors que je procède comme ca :
 

Code :
  1. StringBuilder l_SBRessource = new StringBuilder();
  2. List<CRessource> l_Ressources = CRessourceManager.Rechercher();
  3. foreach (CRessource l_Ressource in l_Ressources)
  4. {
  5.      CheckBox l_CheckBox = new CheckBox();
  6.      l_CheckBox.ID = "cb"+l_Ressource.Identifiant.ToString();
  7.      ....
  8.      StringWriter l_Writer = new StringWriter();
  9.      HtmlTextWriter l_HtmlWriter = new HtmlTextWriter(l_Writer);
  10.      l_CheckBox.RenderControl(l_HtmlWriter);
  11.      ...
  12.      l_SBRessource.Append("<tr><td>" );
  13.      l_SBRessource.Append(l_Writer.ToString());
  14.      ...
  15. }


 
Mais lors du parcours des Controls de la page, les Checkbox ne sont pas ajoutés, car Controls ne comprends qu'un seul élément :
 

Code :
  1. foreach (Control l_Control in Controls)
  2. {
  3.      ...
  4. }


 
Y aurait il une autre façon de procéder?
De quoi cette eureur peut être venir?

Reply

Marsh Posté le 19-05-2008 à 16:17:36   

Reply

Marsh Posté le 20-05-2008 à 01:02:10    

Bonsoir,
 
Tu peux rajouter les controles à ta page (et a n'importe quel Container en fait :o) via le bout de code suivant :

Code :
  1. Page.Form.Controls.Add(l_CheckBox);


ou

Code :
  1. TonContainer.Controls.Add(l_CheckBox);


Message édité par x1800+ le 20-05-2008 à 01:04:04
Reply

Marsh Posté le 21-05-2008 à 13:48:00    

D'accord oui!
Mais lors du rechargement de la page, via un bouton par exemple, quand on passe dans le IsPostBack, est il possible de récupérer les valeurs des contrôles?
Je voudrais récupérer l'état de mes checkbox (coché/décochés) en fontion de leur ID...

Reply

Marsh Posté le 21-05-2008 à 15:26:08    

A priori vu ton bout de code, tu ne fais qu'écrire le "rendu" HTML de ta checkbox, dans un HTMLTextWriter.
Elle n'est donc pas présente dans la liste des controles de la Page, ni même de ses enfants.
 
Par conséquent, elle n'est pas soumise au PostBack.
 
Pour que le PostBack fonctionne automatiquement (et donc pour qu'il conserve la valeur de la propriété Checked de ta CheckBox), tu dois l'ajouter a la liste des controles de la Form (Page.Form.Controls.Add(...) au chargement de ta page)
 
 
Il faut donc :
 - Que tu crée tes CheckBox dans une surcharge du OnPreInit (par exemple)
 - Que tu les ajoutes au formulaire dans le Page_Load
 
Tu pourras alors récupérer la valeur de ta CheckBox une fois que le chargement sera effectué (OnLoadComplete ou Render par exemple).
 

Code :
  1. CheckBox maCheckBox = new CheckBox();
  2.     protected override void OnPreInit(EventArgs e)
  3.     {
  4.         maCheckBox.ID = "cb";
  5.         base.OnPreInit(e);
  6.     }
  7.     protected void Page_Load(object sender, EventArgs e)
  8.     {
  9.         Page.Form.Controls.Add(maCheckBox);
  10.     }
  11.     protected override void OnLoadComplete(EventArgs e)
  12.     {
  13.        if (Page.IsPostBack)
  14.         {
  15.             Response.Write(maCheckBox.Checked + "</br>" );
  16.         }
  17.         base.OnLoadComplete(e);
  18.     }

Reply

Marsh Posté le 21-05-2008 à 15:50:16    

Ca va pas solutionner ton probleme precis mais:
 
Tu peux aussi jeter un oeil du coté des Repeater
(System.Web.UI.WebControls) et des ItemTemplate coté HTML,
pour gérer des listes/formulaires dynamiques importants de controls.
 
un peu comme toi, pour un intranet je devais gerer des listes dynamiques avec pour chaque ligne (item) plusieurs objets dont 1 checkbox.
 
Avec les Repeaters couplés a du DataBinding (les données des listes dans des DS) je suis arrivé a un truc pas mal niveau evolution/possibilité/design et peu de code au final.
 
 
 
 

Reply

Sujets relatifs:

Leave a Replay

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