تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيفية تمرير البيانات الى Microsoft Report باستخدام الباراميترات
#1
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم


بسم الله الرحمن الرحيم وصلى الله على اشرف الخلق محمد وعلى آله وصحبه المنتجبين

السلام عليكم ايها الاحبة اعضاء و زوار المنتدى الأكارم ورحمة الله وبركاته



سنتعلم في هذا الموضوع كيفية تمرير القيم الى تقارير Microsoft Report وكيفة التعامل معها باستخدام الباراميترات وذلك عن طريق لغتي #C و VB وقاعدة بيانات أكسس لكي تعم الفائدة للجميع ان شاءاللهSmile


اولا: نقوم بتصميم جدول فيه ثلاث حقول (std_ID, std_Name, std_Age) 

ثانيا: نفتح نفتح مشروع جديد ونسميه على سبيل المثال ReportViewer ونضع عليه الادوات المطلوبة

ثالثا: من شريط القوائم نختار Projrect ومن ثم Add New Item 
وبعد ان نضغط Add تظهر لنا نافذة تصميم التقرير صممه بالشكل الذي تريد 
بعد الانتهاء من تصميم التقرير من حيث المظهر بقي لنا ان نضيف ثلاث باراميارات الى التصميم لتستقبل القيم المرسلة من قبل المستخدم ,لعمل ذلك نختار View من شريط القوائم ومن ثم نختار Report Data
الآن نضغط بالزر الماوس الايمن على Parameters ونختار Add Parameter 
 وننشىء ثلاث باراميترات.

الآن نضيف الباراميترات الى التصميم 
الى هنا والحمد لله انتهينا من تصميم التقرير وبقي لنا ان نربطه بالReportViewer وذلك عن طريق السهم الموجود في اعلى اليمين للReportViewer ومن Choose Report نخنار التقرير الذي صممناه.



الآن جاء دور كتابة الاكواد ,لنبدأ بعد التوكل على الله:

اولا: مجالات الاسماء:

#C





PHP كود :
using System.Data.OleDb;
using Microsoft.Reporting.WinForms


VB





PHP كود :
Imports System.Data.OleDb
Imports Microsoft
.Reporting.WinForms 



ثانيا: تعريف المتغيرات:

#C





PHP كود :
private OleDbConnection olecon;
 
       private OleDbDataAdapter oleadp;
 
       private DataTable mytable;
 
       private DataSet myset;
 
       private string constr "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" Application.StartupPath "/student.mdb;";
 
       private int pos 0;

 
       ReportParameter[] rep_param;
 
       ReportDataSource rep_source



VB





PHP كود :
Private olecon As OleDbConnection
    Private oleadp 
As OleDbDataAdapter
    Private mytable 
As DataTable
    Private myset 
As DataSet
    Private constr 
As String "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" Application.StartupPath "/student.mdb;"
 
   Private pos As Integer 0

    Private rep_param
() As ReportParameter
    Private rep_source 
As ReportDataSource 


ملاحظة: تعريف المتغيرات يكون ضمن الفئة From.


ثالثا: تعريف دالة الConnection

#C





PHP كود :
private bool connection()
 
       {
 
           olecon = new OleDbConnection(constr);
 
           oleadp = new OleDbDataAdapter("select * from std"olecon);

 
           myset = new DataSet("Student");
 
           mytable = new DataTable();

 
           try
            
{

 
               olecon.Open();
 
               oleadp.Fill(myset"Student");
 
               mytable myset.Tables["Student"];

 
               return true;
 
           }
 
           catch(Exception ex)
 
           {
 
               MessageBox.Show(ex.Message);
 
               return false;
 
           }
 
           finally
            
{
 
               olecon.Close();
 
           }
 
       



VB





PHP كود :
Private Function connection() As Boolean

        olecon 
= New OleDbConnection(constr)
 
       oleadp = New OleDbDataAdapter("select * from std"olecon)

 
       myset = New DataSet("Student")
 
       mytable = New DataTable()

 
       Try


            olecon
.Open()
 
           oleadp.Fill(myset"Student")
 
           mytable myset.Tables("Student")

 
           Return True

        Catch ex 
As Exception
            MessageBox
.Show(ex.Message)
 
           Return False

        Finally

            olecon
.Close()

 
       End Try

 
   End Function 



ثاثا: دالة Filling:

#C





PHP كود :
private void Filling(int p)
 
       {
 
           id_txt.Text mytable.Rows[p]["std_ID"].ToString();
 
           name_txt.Text mytable.Rows[p]["std_Name"] as string;
 
           age_txt.Text mytable.Rows[p]["std_Age"] as string;
 
       



VB





PHP كود :
Private Sub Filling(ByVal p As Integer)

 
       id_txt.Text mytable.Rows(p)("std_ID").ToString()
 
       name_txt.Text mytable.Rows(p)("std_Name").ToString()
 
       age_txt.Text mytable.Rows(p)("std_Age").ToString()

 
   End Sub 



رابعا: استدعاء الدالة Connection داخل الحدث Load للFrom:

#C





PHP كود :
private void Form1_Load(object senderEventArgs e)
 
       {
 
           if (connection())
 
           {
 
               MessageBox.Show("Connection Succeed");
 
           }
 
           else
            
{
 
               MessageBox.Show("Connection Fail");
 
           }

 
this.reportViewer1.RefreshReport();
 
       



VB





PHP كود :
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

        If 
(connection()) Then

            MessageBox
.Show("Connection Succeed")

 
       Else

            MessageBox
.Show("Connection Fail")
 
       End If

 
       Me.ReportViewer1.RefreshReport()

 
   End Sub 



خامسا: استدعاء الدالة Filling داخل ShowData:

#C





PHP كود :
private void show_btn_Click(object senderEventArgs e)
 
       {
 
           Filling(pos);
 
       



VB





PHP كود :
Private Sub show_btn_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles show_btn.Click

        Filling
(pos)

 
   End Sub 



سادسا: كتابة اكواد السجل التالي والسابق:

#C





PHP كود :
private void next_btn_Click(object senderEventArgs e)
 
       {

 
           if (pos mytable.Rows.Count 1)
 
           {
 
               pos++;
 
               Filling(pos);
 
           }
 
       }

 
       private void prev_btn_Click(object senderEventArgs e)
 
       {
 
           
            if 
(pos 0)
 
           {
 
               pos--;
 
               Filling(pos);
 
           }
 
       



VB





PHP كود :
Private Sub next_btn_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles next_btn.Click

        If 
(pos mytable.Rows.Count 1Then
            pos 
pos 1
            Filling
(pos)
 
       End If

 
   End Sub

    Private Sub prev_btn_Click
(ByVal sender As System.ObjectByVal e As System.EventArgsHandles prev_btn.Click

        If 
(pos 0Then
            pos 
pos 1
            Filling
(pos)
 
       End If

 
   End Sub 



واخيرا كتابة كود تمرير القيم عن طريق الباراميترات داخل زر الReport:


#C





PHP كود :
private void to_btn_Click(object senderEventArgs e)
 
       {
 
           rep_source = new ReportDataSource("mytable"mytable);
 
           this.reportViewer1.LocalReport.DataSources.Add(rep_source);

 
           rep_param = new ReportParameter[mytable.Columns.Count];
 
           rep_param[0] = new ReportParameter("id"id_txt.Text);
 
           rep_param[1] = new ReportParameter("name"name_txt.Text);
 
           rep_param[2] = new ReportParameter("age"age_txt.Text);

 
           this.reportViewer1.LocalReport.SetParameters(rep_param);
 
           this.reportViewer1.RefreshReport();
 
       



VB





PHP كود :
Private Sub to_btn_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles to_btn.Click

        rep_source 
= New ReportDataSource("mytable"mytable)
 
       Me.ReportViewer1.LocalReport.DataSources.Add(rep_source)

 
       ReDim rep_param(mytable.Columns.Count 1)
 
       rep_param(0) = New ReportParameter("id"id_txt.Text)
 
       rep_param(1) = New ReportParameter("name"name_txt.Text)
 
       rep_param(2) = New ReportParameter("age"age_txt.Text)

 
       Me.ReportViewer1.LocalReport.SetParameters(rep_param)
 
       Me.ReportViewer1.RefreshReport()

 
   End Sub 



الى هنا والحمد لله انتهينا من كتابة الاكواد ,بقي لنا ان نشرح الجزء الاهم وهي كيفية تمرير القيم كباراميترات.

في البداية يجب تحديد مصدر البيانات للتقرير ويمكن عمل ذلك باستخدام فئة الReportDataSource كما مبين في الكود اعلاه لل#C والVB
ومن ثم اضافة مصدر البيانات الى الReportViewer.

بعد تحديد مصدر البيانات نأتي الى الباراميترات:
نكون مصفوفة من الباراميترات حجمها يساوي عدد الحقول في الجدول اذا اردنا تمرير قيم كل الحقول الموجودة لسجل واحد فقط في الجدول وإلا نحددها بعدد الباراميترات التي أنشأناها في التقرير.
يكون تمرير القيم عن طريق فئة الReportParameter التي تستقبل اسم الباراميتر مع القيمة الممررة اليها.

ومن ثم نسند المصفوفة الى الreportviewer عن طريق دالة الSetParameters للفئة Local Report.


إلى هنا وبفضل الله نكون قد وصلنا الى نهاية الموضوع حيث تعلمنا كيفية تمرير القيم الى Microsoft Report باستخدام الباراميترات وباستخدام لغتي #C و VB , وفي النهاية لا تنسوني و والدي من صالح دعواتكم واسأل الله أن يوفقنا واياكم لمراضيهSmile

ملاحظة: المثال في المرفقات (C#, VB).




الملفات المرفقة
.rar   Report_Viewer_VB.rar (الحجم : 60.72 ك ب / التحميلات : 236)
.rar   ReportViewer_C#.rar (الحجم : 46.38 ك ب / التحميلات : 42)
الرد }}}}
تم الشكر بواسطة: sniperjawadino , momiana1 , مبرمج بلا حدود
#2
جزاكم الله خيرا
الرد }}}}
تم الشكر بواسطة:
#3
honeesh كتب :جزاكم الله خيرا

السلام عليكم

وجزاك بالمثل ش
الرد }}}}
تم الشكر بواسطة: مبرمج بلا حدود
#4
جزاكم الله كل خير ان شاء الله
لكن هل تمت تجربة هذا التقرير في حالة قلب صفحات التقرير
لانها عندما اعملها في الكرستال ريبورت تضهر مشاكل في حالة كان لتقرير يتكون من اكثر من صفحة
اكرر شكري اليك اخي مرة ثانية
مدونتي
صفحتي على الفيسبوك

MCTS SQL Server 2008
MCSA SQL Server 2012
Microsoft Certified Trainer
SharePoint Administrator
الرد }}}}
تم الشكر بواسطة: Sajad
#5
السلام عليكم

بارك الله فيك اخي العزيز وجزاك بالمثل ان شاءالله انا لم استخدم كريستال ريبوت بل استخدمت تقارير مايكروسوفت الجاهزة فلا احب استخدام كريستال ريبوت

لكن اعتقد انه سيعمل في حال كان التقرير اكثر من صفحة لكن لم اجربه في الكريستال

شكرا على التعليق
الرد }}}}
تم الشكر بواسطة: مبرمج بلا حدود
#6
لن إقدر الا إن إقول بارك الله فيك وزادك علما ورفع من شأنك دنيا وإخرة

إشهـــــــــــــــــــد إن لا إله إلا اللــــــــــــه إشهـــــــــــــــــد إن محمد رسول اللــــــــــــــه

الرجال أربعة
رجل يدري ويدري أنه يدري فذلك عالم فاتبعوه.Smile
ورجل يدري ولا يدري أنه يدري فذلك نائم فأيقظوه.Cool
ورجل لا يدري ويدري أنه لا يدري فذلك مسترشد فأرشدوه.Big Grin

ورجل لا يدري ولا يدري أنه لا يدري فذلك جاهل فارفضوه‏.‏Cool
الرد }}}}
تم الشكر بواسطة: مبرمج بلا حدود
#7
السلام عليكم

ولك بالمثل ان شاءالله
الرد }}}}
تم الشكر بواسطة:
#8
بارك الله فيك أخى sajed
عمل رائع مما لا شك فيه
ارجو مثال أن يكون أكثر من صف فى التقرير
فهو لا يقبل الا صف واحد
الرجاء حل هذه المشكلة (ويا حبذا لو استخدمت Binding Source)
جزاك الله كل خير
الرد }}}}
تم الشكر بواسطة:
#9
السلام عليكم

على عيني تفضل الامثلة في المرفقات

طريقة الاستخدام

اولا حدد هل تريد طباعة الكل ام المحدد ثم انقر على Reprot (التحديد من الDatagridview عن طريق الماوس)


بالتوفيق ان شاءاللهSmile


الملفات المرفقة
.rar   ReportViewer_C#.rar (الحجم : 51.61 ك ب / التحميلات : 21)
.rar   Report_Viewer_VB.rar (الحجم : 63.25 ك ب / التحميلات : 82)
الرد }}}}
تم الشكر بواسطة: مبرمج بلا حدود
#10
اخي sajad

بارك الله فيك وزادك علما ورفع من شأنك
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  درس مبسط :تمرير القيم من برامجنا لتقارير الكريستال ريبورت m.sami.ak 6 3,022 21-09-16, 02:11 PM
آخر رد: فاطمة عمر
  تمرير صورة الى Crystal Report Sajad 14 6,263 20-04-16, 10:10 AM
آخر رد: saharmoubarak
  تمرير نواتج ال DATAREADER لمعادلة او TEXT فى الكريستال badr123456 0 247 21-11-15, 05:57 PM
آخر رد: badr123456
Photo Passing String From Form to Report Viewer using rdlc Parameter العزابي 5 4,069 01-09-15, 03:43 PM
آخر رد: mbk2006
  دورة التقارير في VB.net باستخدام Report Viewer أحمد النجار 7 3,532 02-07-15, 03:58 PM
آخر رد: مبرمج بلا حدود
  Crystal Report With DataSet Ahmed_online 10 3,183 04-12-14, 12:51 PM
آخر رد: benomar
Lightbulb [مقال] CRYSTAL REPORTS, DEVELOPER VERSION FOR MICROSOFT VISUAL STUDIO ابو ابراهيم 0 1,219 02-12-14, 08:15 AM
آخر رد: ابو ابراهيم
  العمليات الحسابية من قاعدة البيانات الى تقرير الكريستال ريبورت مباشرة aftfm 0 684 02-12-14, 06:29 AM
آخر رد: aftfm
Question مشكلة طباعة تقرير باستخدام باراميتر abuzzouz 1 802 17-07-14, 08:37 AM
آخر رد: abuzzouz
Question [سؤال] مشكلة طباعة تقرير باستخدام باراميتر abuzzouz 1 683 17-07-14, 08:36 AM
آخر رد: abuzzouz

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم