Como criar quebras de linha entre as etiquetas geradas dinamicamente em um espaço reservado?
-
06-07-2019 - |
Pergunta
Este é o código abaixo no código por trás do evento Page_Load
do arquivo:
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);
Eu quero uma quebra de linha entre cada controle gerado.
Solução
solução para o seu problema de quebra de linha está abaixo no entanto, se você está fazendo isso no evento Page_Load, então seus manipuladores de eventos não vai funcionar e seu vai correr em questões página ciclo de vida. Basicamente, para que seus manipuladores de eventos para disparar sobre PostBack, você realmente precisa estar criando esses controles dinâmicos mais cedo no ciclo de vida da página. Tente mover o código para o método OnInit se você se deparar com este 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);
Outras dicas
Outra solução é que você pode adicionar cada controle para um painel, que irá torná-los cada um em um <div>
resultando no efeito que você está procurando.
Para mim, isso seria mais dinâmico porque se você esconder qualquer um dos controles do div entrará em colapso e não deixar linhas vazias.
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);
Como: adicionar controles a um ASP.NET página da Web programaticamente
Em alguns casos, você pode querer criar tanto texto estático e controles. Para criar texto estático, você pode usar um literal ou uma Web Etiqueta servidor controle . Você pode então adicionar estes controles para o recipiente como faria qualquer outro controlo. Para informação sobre estado de exibição em controles criado em tempo de execução, consulte dinâmico Web Server Controles e estado de exibição.