2013-04-29 57 views
1

我有一个处理产品订单的非常简单的应用程序。使用stringbuilder输出数据库报告的HTML好吗?

我想做一些像日常销售报告一样的报告。

因此,这里是我的想法:

我还想建立一个有吸引力的HTML页面,然后复制/粘贴每个HTML行成这样的代码

Stringbuilder sb = new StringBuilder(); 
sb.AppendLine("<html><body>"); // each HTML line here 
sb.AppendLine(products.GetQuantitySold()); 

,然后只需打开后保存的HTML文件将其保存到磁盘。

这对于简单的SQL报表来说可以吗?有更好的更常见的方法吗?我想避免使用任何第三方产品或库。

感谢

+0

这将正常工作,如果你是幸福的与它然后没有问题。就个人而言,我会使用某种模板方法。将每个HTML文件作为具有动态值的实际文件作为一些唯一合并字段,然后您可以加载文件,替换合并字段,然后保存到磁盘。一个独特的字段可能看起来像'{FIELD:QuantitySold}' – musefan 2013-04-29 14:08:31

+1

我很好奇,为什么你不想使用第三方库? – 2013-04-29 17:09:05

回答

5

这是完全可以接受的,就像addings字符串(s += aValue),但StringBuilder快得多。

你可以考虑使用的HtmlTextWriter,请参阅:http://msdn.microsoft.com/en-us/library/system.web.ui.htmltextwriter.aspx

最后一个建议:你可以在某些位置有模板HTML文件存储在光盘上,使用变量,如:

<html><body>[GetQuantitySold]</body></html> 

然后,负载该文件,并替换变量:

string template = File.ReadAllText("MyTemplate.html"); 
template = template.Replace("[GetQuantitySold"], products.GetQuantitySold().ToString()); 

当然,性能也可以用StringBuilder替换值。

+0

我喜欢模板的想法。这正是我需要的,比T4更简单。谢谢! – 2013-04-29 14:21:20

0

这是可以接受的。

也看看AppendFormat

你可以用它象下面这样:

sb.AppendFormat("<li>{0} {1}</li>", person.FirstName, person.LastName); 

除了你也可以建立HtmlControls,但那是另一种方式。就像这样:

HtmlGenericControl htmlcontrol = new HtmlGenericControl("li"); 

选择你真正

+0

,当然还有html文本编辑器,在另一个答案中说。这也是一个不错的选择! – 2013-04-29 14:10:53

0

喜欢什么简而言之,是的,它的罚款。不过,我会建议使用HtmlTextWriter/StringWriter,因为它可以为您生成HTML标记,并允许您programmtically控制标签的属性等等...

简单的例子: -

StringWriter stringWriter = new StringWriter(); 
using (HtmlTextWriter textWriter = new HtmlTextWriter(stringWriter)) 
{ 
    //Begin list 
    textWriter.RenderBeginTag(HtmlTextWriterTag.Ul); 

    //List items 
    textWriter.RenderBeginTag(HtmlTextWriterTag.Li); 

    //Links 
    textWriter.AddAttribute(HtmlTextWriterAttribute.Href, "http://www.google.com"); 
    textWriter.RenderBeginTag(HtmlTextWriterTag.A); 
    textWriter.Write("Google"); 

    textWriter.RenderEndTag();//End A tag 
    textWriter.RenderEndTag();//End Li tag 

    //Render list end tag 
    textWriter.RenderEndTag(); 
}