منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : كيفية تمرير البيانات الى Microsoft Report باستخدام الباراميترات
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4 5 6 7
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم


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

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



سنتعلم في هذا الموضوع كيفية تمرير القيم الى تقارير 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).


جزاكم الله خيرا
honeesh كتب :جزاكم الله خيرا

السلام عليكم

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

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

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

شكرا على التعليق
لن إقدر الا إن إقول بارك الله فيك وزادك علما ورفع من شأنك دنيا وإخرة

السلام عليكم

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

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

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

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


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

بارك الله فيك وزادك علما ورفع من شأنك
الصفحات : 1 2 3 4 5 6 7