بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم
بسم الله الرحمن الرحيم وصلى الله على اشرف الخلق محمد وعلى آله وصحبه المنتجبين
السلام عليكم ايها الاحبة اعضاء و زوار المنتدى الأكارم ورحمة الله وبركاته
السلام عليكم ايها الاحبة اعضاء و زوار المنتدى الأكارم ورحمة الله وبركاته
سنتعلم في هذا الموضوع كيفية تمرير القيم الى تقارير Microsoft Report وكيفة التعامل معها باستخدام الباراميترات وذلك عن طريق لغتي #C و VB وقاعدة بيانات أكسس لكي تعم الفائدة للجميع ان شاءالله
اولا: نقوم بتصميم جدول فيه ثلاث حقول (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 sender, EventArgs 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.Object, ByVal e As System.EventArgs) Handles 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 sender, EventArgs e)
{
Filling(pos);
}
VB
PHP كود :
Private Sub show_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles show_btn.Click
Filling(pos)
End Sub
سادسا: كتابة اكواد السجل التالي والسابق:
#C
PHP كود :
private void next_btn_Click(object sender, EventArgs e)
{
if (pos < mytable.Rows.Count - 1)
{
pos++;
Filling(pos);
}
}
private void prev_btn_Click(object sender, EventArgs e)
{
if (pos > 0)
{
pos--;
Filling(pos);
}
}
VB
PHP كود :
Private Sub next_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles next_btn.Click
If (pos < mytable.Rows.Count - 1) Then
pos = pos + 1
Filling(pos)
End If
End Sub
Private Sub prev_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles prev_btn.Click
If (pos > 0) Then
pos = pos - 1
Filling(pos)
End If
End Sub
واخيرا كتابة كود تمرير القيم عن طريق الباراميترات داخل زر الReport:
#C
PHP كود :
private void to_btn_Click(object sender, EventArgs 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.Object, ByVal e As System.EventArgs) Handles 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 , وفي النهاية لا تنسوني و والدي من صالح دعواتكم واسأل الله أن يوفقنا واياكم لمراضيه
ملاحظة: المثال في المرفقات (C#, VB).