2008-09-30 7 views
5

का उपयोग करके टूटा हुआ हम अपनी रिपोर्ट दिखाने के लिए एमवीसी फ्रेमवर्क (रिलीज 5) और क्रिस्टल रीपोर्टव्यूयर नियंत्रण का उपयोग कर रहे हैं। मुझे रिपोर्ट करने के लिए रिपोर्ट दर्शक नियंत्रण के शीर्ष पर कोई भी बटन नहीं मिल सकता है।क्रिस्टलरपोर्टव्यूवर बटन एमवीसी फ्रेमवर्क

यदि मैं रिपोर्ट 'HoursSummary' के साथ काम कर रहा हूं। यदि मैं आईई में रिपोर्ट व्यूअर पर किसी भी बटन पर होवर करता हूं तो पृष्ठों के निचले हिस्से में प्रदर्शित लिंक '../HoursSummary' है। यह 'http://localhost/HoursSummary' का यूआरएल बनाता है। कोई 'घंटेसमूह' नियंत्रक नहीं है इसलिए मैं 404 त्रुटियां प्राप्त करता रहता हूं।

  • मुझे विश्वास है कि मैं 'http://localhost/reports/HoursSummary' पर रीडायरेक्ट करना चाहता हूं क्योंकि मेरे पास एक रिपोर्ट नियंत्रक है। यदि यह सही तरीका है तो क्या कोई यह जानता है कि ऐसा करने के लिए मुझे CrystalReportViewer नियंत्रण पर कौन सी संपत्ति सेट करनी चाहिए?
  • क्या इस स्थिति को संभालने के लिए कोई आसान तरीका है?
+0

वीएस -2010 और क्रिस्टल रिपोर्ट्स 2010 के लिए अपडेट किया गया: http://stackoverflow.com/questions/3902195/asp-net-mvc-vs2010- क्रिस्टल- रिपोर्ट-beta-2-cant-print-export-zoom-or-change -पा – ben

+0

क्या आप किसी भी कारण से पूर्ववत कर सकते हैं कि यह एमएस रिपोर्टव्यूयर नियंत्रण का उपयोग करने के लिए क्यों लागू नहीं किया जा सकता है? – stan4th

+0

मैंने एमएस रिपोर्ट व्यूअर की कोशिश की लेकिन किसी कारण से यह अभी तक सही काम नहीं करता है। हालांकि, मेरे पास इस बिंदु से काम कर रहे क्रिस्टल रिपोर्ट भी थे और कभी पूरी तरह से इसका पीछा नहीं किया। – ben

उत्तर

3

हम रिपोर्ट दर्शक को काम करने में सक्षम थे और बिना किसी मुद्दे के उत्पादन में पिछले कुछ महीनों से इसका इस्तेमाल कर रहे हैं।

  • हम एक रिपोर्ट नियंत्रक कि रिपोर्ट हम किसी एक लिंक पर क्लिक करने से
  • चलाने के लिए वापस अंत करने के लिए एक ajax फोन करना और एक आंशिक पृष्ठ जहाँ हम सभी भर सकते हैं वापस आ जाएगी चाहते हैं उनके लिंक को सूचीबद्ध करता है हमें आवश्यक पैरामीटर।
  • पैरामीटर भरने के बाद हम 'रिपोर्ट \ रिपोर्ट \ नाम की रिपोर्ट' फॉर्म सबमिट करते हैं।
  • रिपोर्ट नियंत्रक में वापस हम SQL को कॉल करते हैं, हमारे डेटा को वापस करते हैं, और फिर 'पूर्ण रिपोर्ट' नामक एक अलग दृश्य को कॉल करते हैं
  • 'पूर्ण रिपोर्ट' व्यू में केवल क्रिस्टल रिपोर्ट व्यूअर नियंत्रण होता है जहां यह स्वचालित रूप से लेता है रिपोर्ट डेटा जिसे हम व्यूडाटा के माध्यम से पास करते हैं, रिपोर्ट को पॉप्युलेट करता है, इसे प्रस्तुत करता है, और इसे उपयोगकर्ता को भेजता है

सबकुछ बढ़िया काम करता है।

अद्यतन

मैं चरणों मैं मूल रूप से ऊपर सूचीबद्ध करने के लिए कुछ कोड और स्पष्टीकरण जोड़ दिया है। मैंने जो मुख्य आइटम छोड़ा था, वह अंतिम दृश्य के साथ कुछ कोड पीछे था, इसलिए यह क्रिस्टल रिपोर्ट्स के साथ काम करेगा। पीछे कोड न्यूनतम है, लेकिन आवश्यक है। क्रिस्टल रिपोर्टें काम करने के लिए आप निम्न फ़ाइलों के साथ खत्म करने जा रहे हैं:

  • एक लेआउट file.rpt जहां आप उस रिपोर्ट
  • एक aspx फ़ाइल है कि क्रिस्टल रिपोर्टें रिपोर्ट नियंत्रण रखती है डिजाइन। यह वह फ़ाइल है जिसके पीछे कुछ कोड होगा।

कैसे एक दृश्य है कि क्रिस्टल रिपोर्टें के साथ काम करेंगे बनाने के लिए पर विवरण:

  • क्रिस्टल रिपोर्टें डिजाइनर उपयोग करके अपनी रिपोर्ट के लेआउट बनाएँ। परिणामस्वरूप फ़ाइल एक .rpt फ़ाइल होगी। इस उदाहरण के लिए, आइए इस फ़ाइल को AllJobsSummaryReportLayout.rpt पर कॉल करें।
  • 'रिपोर्ट फ़ील्ड' के लिए, अपनी रिपोर्ट को डिज़ाइन करते समय, व्यवसाय संस्थाओं या डीटीओ में से एक का चयन करें जो SQL से वापस आने वाले परिणाम रखता है।
  • एक त्वरित तरफ, हमारे पास हमारे सिस्टम में कुछ डेटा ट्रांसफर ऑब्जेक्ट्स (डीटीओ) हैं जिनमें स्केलर मूल्यों और तारों से ज्यादा कुछ नहीं है, इन डीटीओ में कोई बुद्धि नहीं है। जब नियंत्रक को बुलाया जाता है, तो यह मॉडल को कॉल करता है, इनमें से अधिकतर रिपोर्टों के लिए मॉडल डीटीओ की एक सूची देता है जिसे हम प्रस्तुत करने के लिए दृश्य को पास करते हैं। ये डीटीओ नहीं जानते कि खुद से कैसे पूछें, स्वयं को प्रदर्शित करें, उनमें केवल SQL से लौटाए गए वास्तविक मान होते हैं जो किसी और को प्रस्तुत करते हैं।
  • एक बार जब लेआउट क्रिस्टल रिपोर्ट फ़ाइल पूरी हो जाती है, तो AllJobsSummaryReportLayout.rpt, हम अपने नियंत्रक को डिज़ाइन करते हैं। नियंत्रक हम रिपोर्ट चलाने के लिए आवश्यक कोई भी पैरामीटर में ले में, मॉडल फोन, मॉडल DTOs की हमारी सूची देता है, नियंत्रक से नीचे के स्निपेट के रूप में देखा:

    var reportViewData = model.AllJobsSummaryQuery(startDate, endDate); 
    if (0 != reportViewData.Count()) 
    { 
        var report = new AllJobsSummaryReportLayout(); 
        report.SetDataSource(reportViewData); 
        report.SetParameterValue("startDate", startDate); 
        report.SetParameterValue("endDate", endDate); 
        ViewData["ReportData"] = report; 
        returnView = "AllJobsSummaryView"; 
    } 
    else 
        returnView = "noReportView"; 
    return View(returnView); 
    
  • नोट यहाँ आइटम के एक जोड़े, हम एक विविध 'रिपोर्ट' बना रहे हैं जो क्रिस्टल रिपोर्ट लेआउट फ़ाइल का एक प्रकार है, AllJobsSummaryReportLayout.rpt, जिसे हमने ऊपर बनाया है।

  • एक बार जब हम 'रिपोर्ट' वैरिएबल बनाते हैं तो हम डेटा स्रोत मान और किसी भी पैरामीटर को सेट करते हैं, और आइटम को व्यूडेटा में बंडल करते हैं।

  • अब आइएलजेब्ससमरी व्यू.एएसएक्स पर एक नज़र डालें।

<%@ Page Title="All Jobs Summary Report" Language="C#" AutoEventWireup="true" CodeBehind="AllJobsSummaryView.aspx.cs" Inherits="V.Views.Reports.AllJobsSummaryView"%>  
<%@ Register Assembly="CrystalDecisions.Web, Version=10.5.3700.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %> 
<form id="form1" runat="server"> 
<div> 
<a href="/Reports" id="Report"><< Return to Report Main 
    Page</a><br /> 
<CR:CrystalReportViewer ID="ReportViewer" runat="server" AutoDataBind="True" EnableDatabaseLogonPrompt="False" 
    EnableParameterPrompt="False" HasCrystalLogo="False" DisplayGroupTree="False" 
    HasDrillUpButton="False" HasToggleGroupTreeButton="False" HasViewList="False" 
    HasSearchButton="False" EnableDrillDown="False" EnableViewState="True" 
    Height="50px" ReportSourceID="CrystalReportSource1" Width="350px" />  
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server"> 
    <Report FileName="AllJobsSummaryReportLayout.rpt"> 
    </Report> 
</CR:CrystalReportSource> 
</div> 
</form> 
  • और फ़ाइल के पीछे कोड: इस फ़ाइल में एक क्रिस्टल रिपोर्ट व्यूअर के साथ उस पर एक फार्म और फ़ाइल के पीछे एक कोड है

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.Mvc; 
    
    namespace V.Views.Reports 
    { 
        public partial class AllJobsSummaryView : ViewPage 
        { 
         protected void Page_Init(object sender, EventArgs e) 
         { 
          ReportViewer.ReportSource = ViewData["ReportData"]; 
         } 
    
         protected void Page_Unload(object sender, EventArgs e) 
         { 
          ((AllJobsSummaryReportLayout)ViewData["ReportData"]).Close(); 
          ((AllJobsSummaryReportLayout)ViewData["ReportData"]).Dispose(); 
         } 
        } 
    } 
    
  • Page_Unload कुंजी है, इसके बिना आपको क्रिस्टल रिपोर्ट्स द्वारा उत्पन्न त्रुटि होगी 'आपने अपने व्यवस्थापक द्वारा निर्धारित रिपोर्ट की अधिकतम संख्या पार कर ली है trator। '

यह विधि अभी भी दो वर्षों से अधिक उत्पादन वातावरण में काम कर रही है।

+0

मैं यह बेन करने की कोशिश कर रहा हूं। आपके आखिरी चरण में आप कहते हैं कि आपके पास CrystalReportViewer के साथ एक दृश्य है। मुझे कोड-बैक के बिना ठीक से काम करने के लिए यह प्रतीत नहीं होता है। क्या आप कुछ और विवरण दे सकते हैं और अपने व्यू कोड को देख सकते हैं? – Craig

3

यदि यह सर्वर नियंत्रण है, तो यह काम नहीं करेगा। एएसपी.नेट एमवीसी किसी भी पोस्टबैक का उपयोग नहीं करता है, इसलिए अधिकांश वेबफॉर्म सर्वर नियंत्रण काम नहीं करते हैं।

आप क्या कर सकते हैं रिपोर्ट दर्शक को iFrame में एम्बेड करें और आउटपुट करें कि आपके एमवीसी व्यू में। आईवीआरएम एमवीसी सामान के के बाहर पृष्ठ पर इंगित कर सकता है, लीगेसी या कुछ नामक उपफोल्डर में कहें।

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