2009-03-29 15 views
7

मैं वर्तमान में एक कंसोल एप्लिकेशन का पुन: उपयोग कर रहा हूं जिसका मुख्य उत्तरदायित्व डेटाबेस में संग्रहीत मानों के आधार पर एक रिपोर्ट उत्पन्न करना है।एचटीएमएल हार्डकोड किए बिना मैं एक एचटीएमएल रिपोर्ट कैसे बना सकता हूं?

तरह से मैं रिपोर्ट टिल अब तक बनाने किया गया है इस प्रकार है:

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 रिपोर्ट उत्पन्न करते हैं और एक भयानक गड़बड़ पैदा करने की संभावना है। (मैंने पहले से ही इस तरह के डरावनी उत्पादों को देखा है! एक रिपोर्ट फ़ंक्शन की कल्पना करें जिसमें रिपोर्ट के ब्योरे को पुनः प्राप्त करने के लिए सैकड़ों लाइनों को हार्ड कोडेड एसक्यूएल है ... यह एक बड़ा आदमी रोने के लिए पर्याप्त है!)

हालांकि, जबकि मुझे यह बिल्कुल पसंद नहीं है ... मैं बस ऐसा करने के लिए एक अलग तरीके से नहीं सोच सकता।

निश्चित रूप से ऐसा करने का एक तरीका होना चाहिए ... मुझे यकीन है। बहुत समय पहले मैं एएसपीएक्स पृष्ठों में तालिकाओं को उत्पन्न करते समय वही काम कर रहा था जब तक कि किसी ने मुझे दिखाया कि मैं केवल वस्तुओं को नियंत्रण में बांध सकता हूं और .NET को प्रतिपादन का ख्याल रखने देता हूं। यह भरोसेमंद कोड, उपरोक्त कोड के समान, भलाई के दो या तीन सुरुचिपूर्ण लाइनों में बदल गया।

क्या कोई भी इस रिपोर्ट के लिए एचटीएमएल को कड़ी कोडिंग किए बिना एचटीएमएल बनाने के समान तरीके से जानता है?

उत्तर

10

कच्चे डेटा के साथ एक्सएमएल फ़ाइल बनाने के लिए अपना ऐप बनाएं। फिर उसमें एक बाहरी एक्सएसएलटी लागू करें जिसमें HTML शामिल होगा।

और जानकारी: http://msdn.microsoft.com/en-us/library/14689742.aspx

+0

मैं इसे आज़मा दूंगा और देख सकता हूं कि मैं कैसे जाता हूं। पहले कभी एक्सएसएलटी के साथ काम नहीं किया है, इसलिए मुझे इसके साथ गति करने के लिए थोड़ा सा समय लगेगा ... इसके अलावा, जब तक मैंने इसे क्रिया में नहीं देखा है, तब तक मैं एक उत्तर चुनना बंद कर दूंगा ... – mezoid

2

ठीक है, आप रिपोर्ट फ्रेमवर्क (क्रिस्टल, एमएस आरडीएल, आदि) और निर्यात निर्यात एचटीएमएल के रूप में उपयोग कर सकते हैं - हालांकि, मुझे संदेह है कि सरल डेटा के लिए आपका वर्तमान दृष्टिकोण कम ओवरहेड है। मैं (बल्कि string.Format से है, जो भागने संभाल नहीं होगा) एक XmlWriter या LINQ करने वाली XML का उपयोग हो सकता है ...

 new XElement("tr", 
      new XElement("td", item.StartDate), 
      new XElement("td", item.Id), 
      new XElement("td", item.WorkItemId), 

आदि से बचने के लिए पाठ मान (नाम, विवरण, आदि) के लिए विशेष रूप से महत्वपूर्ण है।

4

आप NVelocity की तरह एक टेम्पलेट इंजन का उपयोग अपनी रिपोर्ट देख सकते हैं और अपने कोड को अलग करने सकता है। शायद अन्य सभ्य टेम्पलेट इंजन हैं ...

+0

NVelocity एक है अच्छा एक ... अन्य टेम्पलेट इंजनों के साथ संगत – jle

+0

इसके अलावा, स्ट्रिंग टेम्पलेट पर विचार करें, जो एएनटीएलआर पार्सर/कंपाइलर जनरेटर का उपयोग करता है। मैंने इसे समान समस्याओं के लिए उपयोग किया है और यह एक बहुत अच्छा फिट था। http://stringtemplate.org/ –

1

आप http://www.stefansarstedt.com/templatemaschine.html जैसे एक साधारण टेम्पलेट इंजन का उपयोग करने पर विचार कर सकते हैं और सामग्री से अपना टेम्पलेट अलग कर सकते हैं।

यह काफी व्यावहारिक है, बिना किसी संकलन के टेम्पलेट संशोधन की अनुमति देता है और आपको अभी भी अपने टेम्पलेट्स में सी # शक्ति मिल गई है।

0

माइक्रोसॉफ्ट एसक्यूएल रिपोर्टिंग सेवाएं यह काफी अच्छी तरह से करती हैं, और कई प्रारूप कर सकती हैं।

मेरी कंपनी इसका उपयोग पीडीएफ रिपोर्ट बनाने के लिए करती है और चूंकि हमारे पास एचआईपीएए आवश्यकताएं हैं, इसलिए हम स्वचालित रूप से किसी तीसरे पक्ष के पीडीएफ नियंत्रण के माध्यम से पासवर्ड डालते हैं ...

3

मेज़ियोड - एक अन्य एवेन्यू peruse के लिए HtmlTextWriter ऑब्जेक्ट के विस्तार विधियां हैं। मुझे इस साइट पर बस एक शानदार स्टैब मिला।

HtmlTextWriter extension

मुझे विश्वास है कि आप उस से काफी संभावना का लाभ उठाने सकता है कि हूँ ...

संबंध - Coola

+0

+1 HtmlTextWriter का उल्लेख करने और एक्सटेंशन विधि-पोस्ट में लिंक जोड़ने के लिए। मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं यह जोड़ना चाहता हूं कि एक्सटेंशन-विधियां बेहद उपयोगी हैं! – Sprezlaus

0

जैसा कि पहले ही उल्लेख किया coolashaka, HtmlTextWriter का उपयोग कर एक अच्छा विकल्प है, निश्चित रूप से अगर सरल उदाहरण

:

आप कुछ उपयोगी विस्तार विधियों को जोड़ने, उदाहरण के लिए 210

मुझे पता है कि यह एक पुराना सवाल है, लेकिन Google यहां आने वाले सालों तक लोगों को निर्देशित करेगा।

संबंधित मुद्दे