2009-05-06 11 views
16

Jest to poniżej kod w kodzie za Page_Load przypadku pliku,:Jak tworzyć podziały wierszy między dynamicznie generowanymi etykietami w symbolach zastępczych?

 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); 

chcę podział wiersza między każdą kontrolę generowanych.

Odpowiedz

39

Rozwiązanie problemu z linią podziału jest jednak poniżej, jeśli robisz to w przypadku zdarzenia Page_Load, wtedy programy obsługi zdarzeń nie będą działały, a Ty będziesz mieć problemy z cyklem życia strony. Zasadniczo, aby programy obsługi zdarzeń były uruchamiane w trybie PostBack, konieczne jest wcześniejsze utworzenie tych dynamicznych elementów sterujących w cyklu życia strony. Spróbuj przenieść kod do metody OnInit, jeśli wystąpi ten problem.

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); 
1

How to: Add Controls to an ASP.NET Web Page Programmatically

W niektórych przypadkach, może chcesz tworzyć zarówno tekst statyczny i kontroli. Aby utworzyć tekst statyczny, można użyć literalnego lub etykietowego serwera WWW control. Następnie można dodać te kontrole do kontenera, tak jak każdy inny element sterujący. Informacje na temat stanu wyświetlania w formantach utworzonych w czasie wykonywania, patrz Dynamiczny serwer WWW Elementy sterujące i stan widoku.

3

Innym rozwiązaniem jest dodanie każdego elementu sterującego do panelu, co spowoduje, że każdy z nich będzie miał wartość <div>, czego wynikiem będzie efekt, którego szukasz.

Dla mnie byłoby to bardziej dynamiczne, ponieważ jeśli ukryjesz któryś z elementów sterujących, element div zwinie się i nie pozostawi pustych linii.

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);