c# - 如何在不对 html 进行硬编码的情况下创建 html 报告?

标签 c# .net html reporting hard-coding

我目前正在重构一个控制台应用程序,其主要职责是根据存储在数据库中的值生成报告。

到目前为止,我创建报告的方式如下:

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 页面中生成表格时也在做同样的事情,直到有人好心地向我展示我可以将对象绑定(bind)到控件并让 .NET 负责呈现。它将可怕的代码(类似于上面的代码)变成了两三行优雅的代码。

有没有人知道在不对 html 进行硬编码的情况下为该报告创建 html 的类似方法?

最佳答案

让您的应用生成包含原始数据的 XML 文件。然后对其应用包含 HTML 的外部 XSLT。

更多信息:http://msdn.microsoft.com/en-us/library/14689742.aspx

关于c# - 如何在不对 html 进行硬编码的情况下创建 html 报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695646/

相关文章:

jquery - 在 jquery 中滑动返回

c# - 如何正确读取 Interlocked.Increment'ed int 字段?

jquery - Bootstrap,滚动到它后保持div固定

c# - 如果在后台 Android Xamarin,获取通知消息以在前台显示我的应用程序

c# - Linq 选择 : Using a value from a list if available

.net - 采用默认 web.config 并增加 maxStringContentLength 所需的更改

.net - 从父控件设置 WPF 嵌套控件属性

javascript - 自定义音频播放器问题

c# - NHibernate 中不区分大小写的排序顺序

c# - 在一行中向列表中添加多个元素C#