У меня есть решение, которое работает, но оно не соответствует требованиям заказчика. Проблема в том, что я не могу контролировать расположение элементов WebControls, они должны быть относительно графика, который находится над ними. Как я вижу, мне нужно " скомпилировать " sb.ToString () в WebControl, который я затем смогу Controls.Add ().
Мне нужно перейти от этого рабочего решения:
приватная пустота SetTextBoxes ()
{
TextBox myBox = new TextBox ();
System.Web.UI.WebControls.Label myLabel =
новый System.Web.UI.WebControls.Label ();
// <table><tr>
for (int i = 0; i < _module.Values.Count; i++)
{
myLabel = new System.Web.UI.WebControls.Label();
myLabel.Text = _module.Values[i].Text.ToString() + ": ";
myBox = new TextBox();
myBox.BorderStyle = BorderStyle.None;
myBox.ReadOnly = true;
myBox.Text = _module.Values[i].Value.ToString("n0");
myBox.Columns = myBox.Text.Length;
// <td align="center">
Controls.Add(myLabel);
Controls.Add(myBox);
// </td>
}
// </tr></table>
}
Ключ - это Controls.Add()
, поскольку он связан с модульной системой, охватывающей этот код и несколько других элементов WebControls.
У меня есть предложение о том, как может выглядеть решение.
private string WriteHtml()
{
StringBuilder sb = new StringBuilder();
using (StringWriter stringWriter = new StringWriter(sb))
{
using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter))
{
htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Table);
htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Tr);
for (int i = 0; i < _module.Values.Count; i++)
{
htmlTextWriter.RenderBeginTag(HtmlTextWriterTag.Td);
htmlTextWriter.Write(string.Format("{0}: {1:n0}"
, _module.Values[i].Text
, _module.Values[i].Value));
htmlTextWriter.RenderEndTag(); // td
}
htmlTextWriter.RenderEndTag(); // tr
htmlTextWriter.RenderEndTag(); // table
}
}
//Controls.Add(sb.ToString());
return sb.ToString();
}