Come creare interruzioni di riga tra etichette generate dinamicamente in un segnaposto?
-
06-07-2019 - |
Domanda
Questo è il codice seguente nel codice dietro l'evento Page_Load
del file:
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);
Voglio un'interruzione di riga tra ogni controllo generato.
Soluzione
La soluzione al tuo problema di interruzione di riga è di seguito, tuttavia, se lo stai facendo nell'evento Page_Load, i gestori di eventi non funzioneranno e si verificheranno problemi con il ciclo di vita della pagina. Fondamentalmente, affinché i gestori di eventi possano attivare PostBack, è necessario creare questi controlli dinamici all'inizio del ciclo di vita della pagina. Prova a spostare il codice sul metodo OnInit se riscontri questo problema.
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);
Altri suggerimenti
Un'altra soluzione è che puoi aggiungere ogni controllo a un Pannello, il che li renderà ciascuno in un <div>
risultante nell'effetto che stai cercando.
Per me questo sarebbe più dinamico perché se nascondi uno qualsiasi dei controlli il div collasserà e non lascerà le righe vuote.
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);
Procedura: aggiungere controlli a una pagina Web ASP.NET a livello di programmazione
In alcuni casi, potresti volerlo creare sia testo statico che controlli. Per creare testo statico, puoi utilizzare un server Web Literal o Label Controllo . È quindi possibile aggiungere questi controlli al contenitore come si farebbe qualsiasi altro controllo. Per informazioni sullo stato di visualizzazione nei controlli creati in fase di esecuzione, consultare Dynamic Web Server Controlli e visualizza stato.