हम रिपोर्ट दर्शक को काम करने में सक्षम थे और बिना किसी मुद्दे के उत्पादन में पिछले कुछ महीनों से इसका इस्तेमाल कर रहे हैं।
- हम एक रिपोर्ट नियंत्रक कि रिपोर्ट हम किसी एक लिंक पर क्लिक करने से
- चलाने के लिए वापस अंत करने के लिए एक 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। '
यह विधि अभी भी दो वर्षों से अधिक उत्पादन वातावरण में काम कर रही है।
वीएस -2010 और क्रिस्टल रिपोर्ट्स 2010 के लिए अपडेट किया गया: http://stackoverflow.com/questions/3902195/asp-net-mvc-vs2010- क्रिस्टल- रिपोर्ट-beta-2-cant-print-export-zoom-or-change -पा – ben
क्या आप किसी भी कारण से पूर्ववत कर सकते हैं कि यह एमएस रिपोर्टव्यूयर नियंत्रण का उपयोग करने के लिए क्यों लागू नहीं किया जा सकता है? – stan4th
मैंने एमएस रिपोर्ट व्यूअर की कोशिश की लेकिन किसी कारण से यह अभी तक सही काम नहीं करता है। हालांकि, मेरे पास इस बिंदु से काम कर रहे क्रिस्टल रिपोर्ट भी थे और कभी पूरी तरह से इसका पीछा नहीं किया। – ben