2013-04-29 112 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(); 
}