المقدمة:
هذه المقالة عبارة عن رابط قدمه Kanyuanzi أول أمس، لقد نسيت من ينتمي إليه، وأتذكر فقط أنه تم نشر العنوان http://www.codeproject.com/aspnet/ReportViewer.asp ، ثم تم نشره. قال ذلك لأنه لسبب ما لم تتم ترجمته. لقد ألقيت نظرة لاحقًا وتصادف أنه كان مفيدًا بالنسبة لي، لأن أحد الأشخاص في الشركة كان يعمل على أشياء RS، وكان قسم الإلكترونيات الضوئية في الطابق السفلي أيضًا لديه احتياجات بكالوريوس في كثير من الأحيان. كنت أعرف عن هذا الشيء منذ فترة طويلة ولكن لم يكن لدي أي شيء لقد حان الوقت لدراستها، لذلك عثرت على هذه المقالة، لذلك قمت بدراستها بعناية طوال فترة ما بعد الظهر، وترجمتها أولاً، ثم أضفت بعض الأفكار.
أثناء عملية الترجمة، حاولت تعريبها قدر الإمكان، لكنني احتفظت بمعنى المؤلف الأصلي. إذا كان هناك أي خطأ في الترجمة، أرجو انتقادي وتصحيحه.
هناك الكثير من أوضاع الخدمة (وضع الخادم) لـ SqlServer RS على الإنترنت، وقد قضيت وقتًا طويلاً في دراسة الوضع المحلي (الوضع المحلي)، خاصة عندما تكون هناك استدعاءات للمعلمات.
السبب وراء استخدام الوضع المحلي بدلاً من وضع الخادم هو أنه في كل مرة يطلب فيها العميل في وضع الخدمة تقريرًا، يجب على الخادم تنظيم البيانات في تقرير ثم إرسالها إلى العميل، على الرغم من أن هذا أكثر أمانًا، إلا أن التقرير الضخم سيفعل ذلك لا تتم معالجتها مطلقًا، حيث يؤدي النقل من خادم إلى متصفح إلى تقليل أدائها.
لذا توضح هذه المقالة كيفية تنظيم تقرير وقراءته باستخدام عنصر تحكم ReportViewer الخاص بـ ASP.NET2.0. وهنا نختار الوضع المحلي ونستخدم إجراءً مخزنًا مع المعلمات. ما أستخدمه هو ASP.NET2.0 وVisualStudio2005 وSQLServer2005 بالإضافة إلى Application Block. إذا لم يكن لديك أداة Microsoft Application Block، فيرجى استبدال التعليمات البرمجية التي تستدعي الإجراء المخزن من خلال SQL Helper في المثال باستخدام SQL Command.
هنا نختار قاعدة بيانات Northwind يوضح مثالنا للمستخدم أن يقوم بتحديد اسم المنتج من القائمة المنسدلة ثم تصفية المعلومات الموجودة في التقرير.
الخطوة الأولى هي إنشاء إجراء مخزنALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15))
مع المعلمات
AS
SELECT Categories.CategoryName، Products.ProductName،
Products.UnitPrice، Products.UnitsInStock
FROM Categories INNER JOIN Products ON
Categories.CategoryID = Products معرف الفئة
RETURN
الخطوة الثانية هي استخدام مصمم DataSet لإنشاء DataTable ضمن DataSet
في واجهة مدير الحلول، انقر بزر الماوس الأيمن فوق ملف App_Code وحدد "إضافة عنصر جديد". حدد "DataSet" في مربع الحوار المنبثق، وقم بتسميته، مثل DataSetProducts.xsd، ثم انقر فوق الزر "إضافة". في هذا الوقت، ستظهر أداة تكوين TableAdapter تلقائيًا. إذا لم تظهر أو تم إغلاقها عن طريق الخطأ، فانقر بزر الماوس الأيمن في أي مكان في مصمم DataSet، وحدد إضافة، ثم حدد TableAdapter، وستظهر الأداة مرة أخرى. قم بإنشاء DataTable وفقًا للمعالج، وحدد "الإجراءات المخزنة الموجودة لدى المستخدم" كنوع الأمر في الواجهة التي تظهر، ثم حدد "ShowProductByCategory" كأمر التحديد.
يصبح الإجراء المخزن الذي تم إنشاؤه في الخطوة الأولى DataTable في الخطوة الثانية، ويتم توفير بيانات التقرير من خلال DataTable هذا.
الشكل 1: DataSetProducts.xsd الذي يحتوي على DataTable هو مصدر بيانات التقرير
الخطوة 3: قم بإنشاء ملف تقرير.
انقر بزر الماوس الأيمن في مدير الحلول وحدد إضافة عنصر جديد، ثم حدد قالب التقرير. في هذا المثال، يتم استخدام الاسم الافتراضي Report.rdlc مباشرة. RDL تعني لغة تعريف التقرير، وc تعني العميل. بمعنى آخر، rdl هو تقرير خادم، وrdlc هو تقرير محلي.
اسحب الجدول من مربع الأدوات إلى نموذج تصميم التقرير. يحتوي هذا "الجدول" على ثلاثة أجزاء، الرأس والمحتوى والذيل. الجدول عبارة عن منطقة تعرض البيانات، وتعرض المنطقة عناصر البيانات ضمن DataSet التي ترتبط بها. على الرغم من أنه يمكن أن يحتوي التقرير على العديد من المناطق، إلا أنه يمكن لكل منطقة عرض محتويات مجموعة بيانات واحدة فقط. بناءً على ذلك، يمكننا استخدام الإجراءات المخزنة لدمج البيانات من جداول متعددة في DataSet لملء التقارير.
الشكل 2: عناصر التحكم في شريط الأدوات المخصص لقوالب التقارير
افتح نافذة "مصدر بيانات موقع الويب" وابحث عن مجموعة بيانات "DataSetProducts"، وهي المجموعة التي تم إنشاؤها في الخطوة الثانية. قم بالتوسيع حتى ترى DataTable المسمى "ShowProductByCategory". يُسمى هذا الجدول بهذا الاسم لأننا حددنا مسبقًا "استخدام الإجراء المخزن الموجود" في معالج تكوين TableAdapter، واسم الإجراء المخزن لدينا هو ShowProductByCategory.
في نافذة مصدر بيانات موقع الويب، اسحب ProductName وUnitPrice وUnitsInStock إلى الصف الذي يعرض التفاصيل في مصمم التقرير، أي الأعمدة الأول والثاني والثالث من الصف الأوسط. ويمكنك النقر بزر الماوس الأيمن فوق أي حقل في صف تفاصيل العرض، ثم العثور على علامة التبويب تنسيق في شريط الخصائص لتحديد تنسيق العرض لسعر الوحدة والوحدة المتوفرة.
الشكل 3. يُظهر نموذج مصدر بيانات موقع الويب مجموعات البيانات المحددة في برنامجك والأعمدة الموجودة بها.
الخطوة 4: قم بإضافة عنصر تحكم ReportViewer إلى صفحة ASP.NET2.0
قم أولاً بسحب عنصر التحكم DropDownList إلى النموذج، ثم قم بربط حقل CategoryName في الفئات عن طريق تحديد خيار مصدر البيانات. في سيناريوهات أخرى، يمكن للمستخدمين إدخال المعلمات من خلال طرق أخرى مثل مربعات النص ثم تمريرها إلى الإجراء المخزن.
ثم اسحب عنصر التحكم "عرض التقرير" إلى النموذج وقم بتعيين الخاصية "مرئي" الخاصة به إلى "خطأ". شيء آخر يجب ملاحظته هو أن عارض التقارير في ASP.NET 2.0 يوفر طرق تصدير Excel وPDF، ومع ذلك، أثناء العملية الفعلية، وجدت أنه سيكون هناك دائمًا اختلاف بسيط بين التقرير المطبوع والطريقة التي صممتها بها.
الشكل 4، قم بتعيين هذه الصفحة إلى صفحة بدء التشغيل
بعد ذلك، قم باستدعاء العلامة الذكية لـ Report Viewer وحدد ملف Report.rdlc الذي قمت بإنشائه للتو.
الشكل 5: دمج ملف تعريف التقرير في عنصر تحكم عارض التقارير.
الخطوة 5: اكتب التعليمات البرمجية للسماح للمستخدمين بتحديد أسماء مختلفة في المربع المنسدل ثم عرض بيانات مختلفة في التقرير.
لا تنس إضافة مساحة الاسم Microsoft.Reporting.WebForms إلى التعليمات البرمجية الخلفية (أو ملف التعليمات البرمجية). ملف.
1
باستخدام النظام;
2باستخدام System.Data;
3using System.Data.SqlClient;
4 باستخدام System.Configuration؛
5 باستخدام System.Collections؛
6 باستخدام System.Web؛
7باستخدام System.Web.Security؛
8باستخدام System.Web.UI؛
9باستخدام System.Web.UI.WebControls؛
10باستخدام System.Web.UI.WebControls.WebParts;
11باستخدام System.Web.UI.HtmlControls;
12باستخدام Microsoft.ApplicationBlocks.Data؛
13استخدام Microsoft.Reporting.WebForms؛
14
15 فئة عامة ReportViewerLocalMode: System.Web.UI.Page
16 {
17 سلسلة عامة thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*استخدمت العبارة التالية لتوضيح ما إذا كان لديك عدة
22 معلمة إدخال، قم بإعلان المعلمة بالرقم
23 من المعلمات في تطبيقك، على سبيل المثال New SqlParameter[4]؛
أربعة وعشرون
25 public SqlParameter[] SearchValue = new SqlParameter[1];
26
27 RunReportButton_Click باطل محمي (مرسل الكائن، EventArgs e)
28 {
29 //ReportViewer1.Visible مضبوط على false في وضع التصميم
30 ReportViewer1.Visible = true;
31 SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = new System.Data.DataSet();
33 SearchValue[0] = new SqlParameter("@CategoryName"،
34 DropDownList1.SelectedValue);
35
36 /**//* ضع نتيجة الإجراء المخزن في مجموعة بيانات */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 "إظهار المنتج حسب الفئة"، قيمة البحث)؛
39
40 /**//*or thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "إظهار المنتج حسب الفئة"، القائمة المنسدلة 1.selectedvalue)؛
42 إذا كان لديك معلمة إدخال واحدة فقط */
43
44 /**//* ربط مجموعة البيانات هذه (المحملة الآن بالملف المخزن
نتيجة الإجراء 45) مع مصدر بيانات ReportViewer */
46 مصدر بيانات ReportDataSource = جديد
47 ريبورتداتاسورس("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(datasource);
52 إذا (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "عذرًا، لا توجد منتجات ضمن هذه الفئة!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59}
الخطوة 6: لتشغيل التقرير،
اضغط على المفتاح F5 ثم انقر فوق الزر "تشغيل التقرير" لتشغيل التقرير.
الشكل 6، تشغيل التقرير
أخيرًا، تأكد من إدخال ReportViewer في موقع الويب وقم بتكوين ملف web.config وقد يكون بالتنسيق التالي:
type = "Microsoft.Reporting.WebForms.HttpHandler، Microsoft.ReportViewer.WebForms، الإصدار = 8.0.0.0، الثقافة = محايدة، PublicKeyToken = ؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟" validate="false" /> عند نشر مشروع موقع ويب باستخدام عنصر تحكم ReportViewer إلى خادم آخر، تحتاج إلى نسخ الملف C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe ثم تشغيله على ملف الخادم الهدف. تجربة الترجمة: يبدو أن هذه هي أبسط ترجمة قمت بها على الإطلاق، ولكن قد يكون السبب هو أن المؤلف قال إنها موجزة وواضحة نسبيًا. تجربة التعلم: شرح المؤلف طريقتين لإعداد التقارير مقبولتين لدى ReportViewer وقام بتحليل بسيط. ومع ذلك، في المشاريع الفعلية، قد يستخدم عدد أكبر من الأشخاص وضع الخادم، ولا يزال بإمكانهم إنتاج بعض التقارير التي ليست كبيرة جدًا أو معقدة جدًا. أعلم أن هناك أشخاصًا في الشركة متخصصون في RS، ويقال إن القيام بذلك يستغرق أسبوعًا، ويعتمد ذلك على جودة الكتابة، فعشر دقائق طبيعية، وإذا تجاوزت الثلاثين دقيقة. قد تحتاج إلى التفكير في تغيير الخوارزمية. يبدو الأمر مخيفًا، هاها، ولكن إذا كان من الممكن استخدامه لاحتياجات إعداد التقارير لقسم الطاقة الكهروضوئية في الطابق السفلي، فأنا أريد أن أكون أكثر راحة من طريقة GridView to Excel السابقة. إذا كان من الممكن البحث في هذا الأمر وفهمه، فإنني أخطط لتقديم شرح فيديو تمهيدي خاص لمساعدة المزيد من الأشخاص على فهم هذا التحكم.