Comment créer des sauts de ligne entre des étiquettes générées dynamiquement dans un espace réservé?
-
06-07-2019 - |
Question
Il s'agit du code ci-dessous dans le code derrière l'événement Page_Load
du fichier:
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
Je souhaite un saut de ligne entre chaque contrôle généré.
La solution
La solution à votre problème de saut de ligne est ci-dessous. Toutefois, si vous le faites dans l'événement Page_Load, vos gestionnaires d'événements ne fonctionneront pas et vous rencontrerez des problèmes de cycle de vie des pages. Fondamentalement, pour que vos gestionnaires d'événements puissent se déclencher sur PostBack, vous devez créer ces contrôles dynamiques plus tôt dans le cycle de vie d'une page. Essayez de déplacer votre code vers la méthode OnInit si vous rencontrez ce problème.
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
PlaceHolder1.Controls.Add(linkButton);
//Add This
PlaceHolder1.Controls.Add(new LiteralControl("<br />"));
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
PlaceHolder1.Controls.Add(label);
Autres conseils
Une autre solution consiste à ajouter chaque contrôle à un panneau, ce qui les rendra chacun dans un <div>
, ce qui donnera l'effet recherché.
Pour moi, cela serait plus dynamique, car si vous masquez l'un des contrôles, la div se réduira et ne laissera pas de lignes vides.
LinkButton linkButton = new LinkButton();
linkButton.ID = "LinkButtonDynamicInPlaceHolder1Id" + i;
linkButton.ForeColor = Color.Blue;
linkButton.Font.Bold = true;
linkButton.Font.Size = 14;
linkButton.Font.Underline = false;
linkButton.Text = itemList[i].ItemTitle.InnerText;
linkButton.Click += new EventHandler(LinkButton_Click);
linkButton.Attributes.Add("LinkUrl",itemList[i].ItemLink.InnerText);
//Add control to a panel, add panel to placeholder
Panel lbPan = new Panel();
lbPan.Controls.Add(linkButton);
PlaceHolder1.Controls.Add(lbPan);
Label label = new Label();
label.ID = "LabelDynamicInPlaceHolder1Id" + i;
label.ForeColor = Color.DarkGray;
label.Text = itemList[i].ItemDescription.InnerText;
//Add control to a panel, add panel to placeholder
Panel lblPan = new Panel();
lblPan.Controls.Add(label);
PlaceHolder1.Controls.Add(lblPan);
Comment: ajouter des contrôles à une page Web ASP.NET par programme
Dans certains cas, vous voudrez peut-être créer du texte statique et des contrôles. Pour créer du texte statique, vous pouvez utiliser un serveur Web Literal ou Label. contrôle . Vous pouvez ensuite ajouter ces contrôles au conteneur comme vous le feriez tout autre contrôle. Pour information à propos de l'état d'affichage dans les contrôles créés au moment de l'exécution, voir Serveur Web dynamique Contrôles et état d'affichage.