我有一个可行的解决方案,但它不符合客户的 QA 要求。问题是我无法控制 WebControls 的位置,它们需要相对于这些上方的图表。我怎么看,我需要将 sb.ToString()“编译”成一个 WebControl,然后我就可以使用 Controls.Add()。
我需要从这个工作解决方案中走出来:
私人无效 SetTextBoxes()
{
TextBox myBox = new TextBox();
System.Web.UI.WebControls.Label myLabel = new 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()
它与涵盖此代码和其他一些 Web 控件的模块化系统相关联。
我对解决方案的外观有一个建议。
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();
}