我目前正在重构一个控制台应用程序,其主要职责是根据存储在数据库中的值生成报告。
到目前为止,我创建报告的方式如下:
const string format = "<tr><td>{0, 10}</td><td>
{1}</td><td>{2, 8}</td><td>{3}</td><td>{4, -30}</td>
<td>{5}</td><td>{6}</td></tr>";
if(items.Count > 0)
{
builder.AppendLine(
String.Format(format, "Date", "Id", "WorkItemId",
"Account Number", "Name", "Address", "Description"));
}
foreach(Item item in items)
{
builder.AppendLine(String.Format(format, item.StartDate, item.Id,
item.WorkItemId, item.AccountNumber,
String.Format("{0} {1}",
item.FirstName, item.LastName),
item.Address, item.Description));
}
string report = String.Format("<html><table border=\"1\">{0}
</table></html>",
builder.ToString());
(以上只是一个示例......对格式感到抱歉......我试图格式化它,所以它不需要水平滚动......)
我真的不喜欢我这样做的方式。它现在可以工作并且可以完成工作......但我只是认为它不可维护......特别是如果报告在需要创建的 html 方面变得更加复杂。更糟糕的是,我团队中的其他开发人员肯定会为他们的应用程序复制和粘贴我的代码,这些应用程序会生成 html 报告,并且可能会造成可怕的混乱。(我已经看到了这样的恐怖!想象一下一个报表函数,它有数百行硬编码的 sql 来检索报表的详细信息......这足以让一个成年人哭泣!)
然而,虽然我根本不喜欢这个......我只是想不出另一种方法来做到这一点。
当然必须有办法做到这一点......我很确定。不久前,我在 aspx 页面中生成表格时也在做同样的事情,直到有人向我展示了我可以将对象绑定到控件并让 .NET 负责呈现。它把可怕的代码,类似于上面的代码,变成了两三行优雅的代码。
有谁知道在不硬编码 html 的情况下为该报告创建 html 的类似方法?