Based on what I've read (I'm new to SP), ISTM that CreateChildControls() is the preferred method for dynamically adding controls to a WebPart, a la:
protected override void CreateChildControls()
{
base.CreateChildControls();
lbl = new Label();
lbl.Text = "Look at this";
this.Controls.Add(lbl);
tb = new TextBox();
this.Controls.Add(tb);
btnSave = new Button();
btnSave.Width = new Unit(50, UnitType.Pixel);
btnSave.Text = "Click me if you dare";
btnSave.Click += new EventHandler(btnSave_Click);
this.Controls.Add(btnSave);
}
However, I see in the legacy code here that CreateChildControls() is not used; instead, I see code like this, overriding Render():
protected override void Render(HtmlTextWriter output)
{
try
{
List<Announcement> announcements = getAnnouncements(AnnouncementsList);
if (announcements.Count > 0)
output.Write(makeHTML(announcements));
}
catch (Exception e)
{
output.Write("Exception: " + e.Message);
}
}
...which then calls a custom method to get HTML to render:
protected string makeHTML(List<Announcement> announcementList)
{
string r = "<div class='platypus-announcements-panel'>";
r += "<h2 class='platypus-white-panel-title'>" + Header + "</h2>";
r += "<dl>";
foreach (Announcement curr in announcementList)
{
r += "<dt>" + curr.date.ToString("MMM") + "<strong>" + curr.date.Day + "</strong>" + curr.date.ToString("yyyy") + "</dt>";
r += "<dd>" + curr.content + "</dd>";
}
r += "</dl>";
r += "</div>";
return r;
}
Is directly adding HTML in this way preferable to dynamically creating controls, as shown above in CreateChildControls()?