تقييم الموضوع :
  • 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 ك ب / التحميلات : 614)
.rar   ReportViewer_C#.rar (الحجم : 46.38 ك ب / التحميلات : 144)
الرد }}}
#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 ك ب / التحميلات : 103)
.rar   Report_Viewer_VB.rar (الحجم : 63.25 ك ب / التحميلات : 274)
الرد }}}
تم الشكر بواسطة: مبرمج بلا حدود
#10
اخي sajad

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


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] طباعة فاتورة باستخدام الكريستال ريبورت Abdoelftah 0 1,724 21-11-21, 11:25 PM
آخر رد: Abdoelftah
Question مشكلة طباعة تقرير باستخدام باراميتر abuzzouz 4 5,496 20-07-21, 03:46 PM
آخر رد: Lathe1
  [VB.NET] شرح طريقة الطباعة مباشرة بدون Report Viewer youcef3zino 2 5,322 18-12-20, 10:44 PM
آخر رد: a7med saba
  [مقال] كيفية التعامل مع XtraReport hoob computer 9 12,608 18-07-20, 10:39 AM
آخر رد: Ahmad shamkhi
  دورة التقارير في VB.net باستخدام Report Viewer أحمد النجار 8 14,678 13-04-20, 04:58 PM
آخر رد: بسام هزاع
  Report Viewer in VS 2017 Sajad 5 9,130 10-01-19, 03:43 AM
آخر رد: khalidalwdi
  تمرير صورة الى CrystalReport Sajad 22 14,265 02-12-18, 06:32 PM
آخر رد: المتألق9
  [Acces2007] رسالة خطأ في الإتصال الكريستال ريبورت مع قاعدة البيانات mohammed mekawi 1 3,115 11-10-18, 04:22 PM
آخر رد: حريف برمجة
  كيفية اضافة Header and footer and some images for PrintDocument sirnon 17 6,184 12-02-18, 11:50 PM
آخر رد: sirnon
  درس مبسط :تمرير القيم من برامجنا لتقارير الكريستال ريبورت m.sami.ak 9 11,090 06-02-18, 10:48 AM
آخر رد: KH_Alaswad

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


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