الصفحة الرئيسية > برمجة التقارير > عمل تقرير لعرض سجل معين

عمل تقرير لعرض سجل معين

عمل تقرير لعرض سجل معين

لاحظت كثرة الأسئلة حول كيفية عمل تقرير لسجل واحد فقط ، وللأسف فإن اغلب السائلين لا يحددون نوع التقارير المستخدم ، وايضا هذا السؤال يتكرر بكثرة ، فقمت بعمل مثال مبسط حول حل هذا السؤال بواسطة اداة التقارير الخاصة بفيجوال ستوديو Microsoft Reporting Tool بواسطة الاصدار 2008 وهي لا تختلف كثيرا عن 2005 لكن لايوجد لدي الاصدار 2005 ، مع ذلك سأقوم بشرح الطريقة فلا تقلقوا

فكرة الحل :


يكمن الحل في عمل filter لبيانات التقرير بإستخدام حقل مميز للسجلات – في مثالي استخدمت قاعدة البيانات الشهيرة Northwind والجدول Customers تحديدا ، في ذلك الجدول ، الحقل Id هو المميز والذي لا يتكرر في كل الظروف – لذلك سنقوم بعمل Parameter ونضعه في الـ filter الخاص بالتقرير ، ثم نمرر قيمته بواسطة الكود قبل عرض التقرير على النافذة .

الحل :
نقوم بعمل مشروع جديد ونضيف له مصدر بيانات جديد New Data Source ثم نحدد قاعدة البيانات Northwind بعدها نختار الجدول customers فقط ونقوم بتسمية الـ Dataset بأي إسم نرغبه ، وليكن CustomersDataset ثم ننهي المعالج بالطبع .

بعدها نقوم بإضافة تقرير جديد الى المشروع وذلك من خلال الضغط على Ctrl+shift+A ثم اختيار Report بعدها سيفتح لنا مصمم التقارير بالتقرير الجديد .

بداية نذهب الى القائمة Report ونختار الأمر Data Sources ومن هناك نقوم بإضافة الـ Dataset الذي قمنا بإضافته توا للمشروع ثم نغلق مربع الحوار .

بعدها تأتي الخطوة الاهم على الإطلاق ،نذهب الى القائمة Report مجددا ونختار Report Parameters لتظهر لنا النافذة التالية :


نقوم بإضافة Parameter جديد ونحدد نوع ليكون Integer ثم نكتب إسمه وليكن CustomerID ثم نضغط على زر OK .

الآن نقوم بإضافة اداة Table وعليها الحقول المطلوبة ( لا اشرح هذه العملية هنا !! ) ثم نقوم بالضغط بالزر الأيمن على ال table في الزاوية العلوية اليسرى بعدها نختار Properties ، ومن النافذة الظاهره نختار Filter ثم هناك بإضافة filter جديد للـ grid ونختار الـ Operator الخاص بالمساواة ، ومن العمود Value نختار من القائمة المنسدلة Expression ومن نافذة ال Expression Editor نختار Parameters وسنرى هناك الباراميتر الذي قمنا بإضافته سابقا ، سنقوم الآن بالضغط على نقرا مزدوجا ثم نضغط على زر OK ونغلق النافذة .

الآن نذهب الى النافذة التي ستعرض التقرير ونضيف في البداية شريط ادوات ToolStrip وبه ثلاث أدوات بالترتيب :
– Label : نكتب عليه نص توجيهي للمستخدم وليكن filter Customer ID ،
– TextBox : اسمه tstxtCustomerID
– Button : اسمه tsbtnshowReport وليكن بالنص فقط ونصه Show Report .

الآن نقوم بوضع اداة Microsoft Report Viewer على النافذة ومن Choose Reports نختار التقرير الذي اضفناه سابقا .

ثم نذهب الى محرر الاكواد الخاص بالنافذة ونضيف فضاء الأسماء التالي :

كود :

Imports Microsoft.Reporting.WinForms

ثم نقوم بحذف السطر :

كود:

Me.ReportViewer1.RefreshReport()

من الحدث Load الخاص بالنافذة form .

بعدها نقوم بكتابة كود للزر tsbbtnShowReport في حدث النقر Click ونكتب الكود التالي :

كود:

Dim CusID(0) As ReportParameter CusID(0) = New ReportParameter(“CustomerID”, tstxtCustomerID.Text) Me.ReportViewer1.LocalReport.SetParameters(CusID) Me.ReportViewer1.RefreshReport()

شرح الكود :
في السطر الاول قمنا بإنشاء مصفوفة من النوع ReportParameter ونختار العنصر الأول فيها ( رقم صفر ) ليكون كائنا جديدا من النوع ReportParameter، وبإستخدام المشيد Constuctor نعطه الوسائط Arguments المطلوبة كما يلي :
– ParameterName : وهنا نكتب اسم الباراميتر الذي اضفناه في التقرير سابقا .
– Value : وهنا قيمة التقرير ، وهي قيمة الشرط في الـ filter ،

ثم نقوم بإضافة الباراميترات الى التقرير من خلال السطر :

كود:

Me.ReportViewer1.LocalReport.SetParameters(CusID)

بعدها نقوم بإظهار محتويات التقرير بالسطر:

كود:

Me.ReportViewer1.RefreshReport()

لذلك قمت بحذفه من الحدث Load لأننا لا نريد عرض التقرير بذلك الشكل، وخذها كمعلومة ، التقرير الذي يحتوي على باراميترات لم تعط قيما لها لن يظهر بل سيطبع رسالة الخطا على جسم التقرير !!

اخيرا الفكرة المستخدمه هنا بالباراميترات يمكن استخدامها لعرض البيانات بين مجالين او تجميع او اي شيء تحتاجه تضع مكانه اسم الباراميتر بإستخدام الـ Expression Editor وتجعل تقاريرك ديناميكية اكثر .

 

لتحميل المثال المذكور يرجى النقر هنا

  1. الطائر التركي
    أكتوبر 25, 2008 عند 3:11 ص

    اولا متشكر جدا علي المعلومات المفيدة
    ولي سؤال وهو
    ما هي القيمة التي نضعها للـ Parameter لكي يعرض جميع السجلات؟
    بمعني
    كيف يتم الجمع بين تقرير اجمالي –جميع السجلات– وتقرير تفصيلي –سجل سجل–؟
    اتمني تكون فهمت قصدي

  2. ahmadshagareen
    ديسمبر 14, 2008 عند 5:08 م

    هل نعمل بنفس الطريقة اذا اردنا استخدام البارميتر من فورم اخر

  3. احمد الشقارين
    أفريل 19, 2009 عند 1:01 م

    اخي العزيز ارجو الافادة
    اريد تصميم التقارير بتقنية linq to sql وخاصة تقارير الكريستال ريبورت
    افدنا جزاك الله عني وعن المسلمين كل خير
    لانه تعبت وانا ابحث ولم اجد شخصا يتحدث عن الموضوع
    حيث اني اعمل على هذه التقنية

  4. عاطف خلف
    مارس 15, 2010 عند 12:57 ص

    كيف يمكن تعريف اداة التقارير مثل الكريستال
    dim rr as new crystalreport1
    ما هو الكود الذي يقابل ذلك

  5. azmara
    أوت 18, 2011 عند 1:09 م

    الرجاء احتاج الى تصميم تقرير كريستال ريبورت يقوم بعرض البيانات استنادا الى معيار معين مع امكانية تغير هذا المعيارحسب الطلب مثلا تقرير يعرض جدول الموظفين لقسم معين في كل مرة يتم تغيير اسم القسم ليعرض الموظفين في تلك الأقسام استنادا الى هذا المعيار مع الشكر الجزيل

  6. أوت 21, 2011 عند 12:17 ص

    اعتذر من الجميع عن تغيبي وعدم الرد على اسئلتكم واستفساراتكم. بالنسبة للاخوة الذين يسألون عن Crystal Reports فأنا لا استخدمه.

    تحياتي لكم

  1. أوت 18, 2008 عند 8:51 م

اترك رداً على azmara إلغاء الرد