المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : شرح طريقة اضافة تقرير Crystal Reports في الـ ASP.NET بكلا اللغتين VB.NET ,C#.NET


محمد
04-25-2010, 06:20 PM
سوف نقوم بكتابة الكود على كلا اللغتين الـ VB.NET and C#.NET لتعم الاستفادة للجميع ..
اولاً سوف نقوم بالتطبيق على الـ ASP.NET VB.NET

افتح الـ Microsoft Visual Studio 2005 واختر من

http://www.ti4it.com/vb/imgcache/2/14302-ti4it.com.JPG

ثم بعد ذلك سوف تظهر لك نافذة أنشاء ويب جديد .. اختر منها ASP.NET Web Site مع التاكد من الـ Language انها Visual Basic
وكذلك الـ location انه File System
وكذلك لا تنسى ان تغير اسم المجلد او تدعه كما هو باسمه الافتراضي ,, وسوف يتم حفظ الملفات في الـ My Documents في مجلد الـ Visual Studio 2005

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 679x452 and weights 72KB.http://www.ti4it.com/vb/imgcache/2/14303-ti4it.com.JPG

ثم اضغط على Ok لكي يتم انشاء الموقع...
طيب الان لا بد من وجود داتا بيس .. ليكي يتم الاتصال بها ..
أنشأ داتا بيس بأي اسم يعجبك .. وانا عن نفسي انشات داتا بيس باسم db1 من نوع Microsoft Access
وكذلك انشا جدول بأي اسم .. وانا انشات جدول باسم tbl_Client للعملاء ..
وكذلك انشأ حقول في الجدول على حسب متطلباتك .. وعن نفسي انشات هذه الحقول ..

C_Name من نوع Text
C_Phone من نوع Text
C_Address من نوع Text

http://www.ti4it.com/vb/imgcache/2/14304-ti4it.com.JPG

بعد انشاء الداتا بيس .. اضف فيها بيانات مبدئية لكي نعرضها في التقرير .. فيما بعد ..
الان قم بنسخ الداتا بيس لديك إلى المشروع .. وضعها في مجلد الـ App_Data وهذا المجلد موجود في الـ

كود

كود PHP:
File >>> New >>> Web Site ID من نوع AutoNumber


كود:
كود PHP:

My DocumentsVisual Studio 2005Your_WebSiteApp_Data










الان اذهب إلى المشروع لكي نقوم باضافة الكرستال ريبوت
من خلال شريط الادوات ToolBox اذهب إلى ادوات الكرستال ريبوت .. وهي تكون تحت كلمه Crystal Reports اضغط دبل كلك على الاداة CrystalReportViewer

http://www.ti4it.com/vb/imgcache/2/14305-ti4it.com.JPG

سوف يتم ادراجها على الصفحة بهذه الصورة

http://www.ti4it.com/vb/imgcache/2/14306-ti4it.com.JPG

الان دع الاداة .. سوف نرجع لها لاحقاً ...

اذهب إلى شريط الادوات .. سوف ترى ايقونه شكلها مربع ... اضغط عليها واختر منها Add New Item...

http://www.ti4it.com/vb/imgcache/2/14307-ti4it.com.JPG

او من خلال Solution Explorer ثم كلك يمين على اسم الموقع ثم اختار منها Add New Item...

http://www.ti4it.com/vb/imgcache/2/14308-ti4it.com.JPG

ثم بعد ذلك سوف يظهر لك مربع حوار Add New Item اختر منه CrystalReport واجعل اسمه الافتراضي كما هو ..

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 678x454 and weights 99KB.http://www.ti4it.com/vb/imgcache/2/14309-ti4it.com.JPG

ثم بعد ذلك اضغط على Ok لكي يتم اضافة التقرير .. بعد ذلك سوف تظهر لك نافذة الـ Crystal Reports Gallery


http://www.ti4it.com/vb/imgcache/2/14310-ti4it.com.JPG

دع الخيارات كما هي واضغط على زر OK لكي تظهر لك نافذة Standard Report Create Wizard

http://www.ti4it.com/vb/imgcache/2/14311-ti4it.com.JPG

انتق الخيار Create New Connection
ثم انتق الخيار OLE DB ADO
سوف تظهر لك نافذة تحديد مزودات الربط بقواعد البيانات ... وبما اننا نستخدم مايكروسوفت اكسس لابد من اختيار

كود
Your_WebSite تعني اسم مشروعك الذي انشاته مسبقا
كود:
كود PHP:

Microsoft Jet 4.0 OLE DB Provider









http://www.ti4it.com/vb/imgcache/2/14312-ti4it.com.JPG

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

النص Database Name

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 686x493 and weights 90KB.http://www.ti4it.com/vb/imgcache/2/14313-ti4it.com.JPG

بعد تحديد الداتا بيس ..

http://www.ti4it.com/vb/imgcache/2/14314-ti4it.com.JPG

الان اضغط على زر التالي Next لكي تظهر لك النافذة التالية

http://www.ti4it.com/vb/imgcache/2/14315-ti4it.com.JPG

دع الخيارات كما هي .. واضغط على كلمه Finish لكي ترجع إلى اول نافذة ومن خلالها يتم اظهار الجداول التي في الداتا بيس ..
قم بتحديد الجدول tbl_Client ثم اضغط على الزر الذي في الاعلى ( <http://www.ti4it.com/vb/imgcache/2/14316-ti4it.com.JPG

http://www.ti4it.com/vb/imgcache/2/14317-ti4it.com.JPG

لكي تم اختيار الجدول .. ومن ثم اضغط على زر Next لكي تظهر لك نافذة تحديد الاعمدة المراد اظهارها في التقرير

http://www.ti4it.com/vb/imgcache/2/14318-ti4it.com.JPG

قم بالضغط على زر (<<http://www.ti4it.com/vb/imgcache/2/14316-ti4it.com.JPG لكي تم اضافة كل الاعمدة .. وفي حالة تريد فقط عدد من الاعمدة يمكنك تحديد واحداُ تلوا الآخر ... بعد تحديد الاعمدة .. قم بالضغط على زر التالي Next سوف تظهر

لك نافذة آخرى هنا يتم فيها اذا كنت تريد عمل علاقات او قروب وغيرها .. دعها كما هي اضغط على Next حتى تصل إلى تحديد شكل التقرير ...
سوف تظهر لك نافذة تحديد الثيم للكرستال ريبوت ... اختر اي شكل مناسب لتقريرك ..

http://www.ti4it.com/vb/imgcache/2/14319-ti4it.com.JPG

ثم بعد ذلك اضغط على زر Finish لكي يتم انشاء التقرير .. ووضع الحقول في التقرير وسوف يكون الشكل النهائي بهذا الشكل ..

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 749x414 and weights 29KB.http://www.ti4it.com/vb/imgcache/2/14320-ti4it.com.JPG

وهذا هو شكل التقرير .. وشكله غير مثير للاهتمام .. الان اذهب إلى صفحة الـ Default.aspx وقم بتحديد الاداة CrystalReportViewer1 سوف يظهر لك الوسم الذكي .. على الاداة انتقه واختر

من خلال الـ Choose Report Source

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 749x414 and weights 29KB.http://www.ti4it.com/vb/imgcache/2/14320-ti4it.com.JPG

أختر New Report Source لكي تظهر لك نافذة آخرى Create Report Source

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 681x288 and weights 61KB.http://www.ti4it.com/vb/imgcache/2/14321-ti4it.com.JPG

دع الاسم الافتراضي كما هو .....وقم بتحديد الكرستال ريبوت الذي انشأناه مسبقا ..

http://www.ti4it.com/vb/imgcache/2/14322-ti4it.com.JPG

من خلال القائمة المنسدلة .. ثم اضغط على OK

http://www.ti4it.com/vb/imgcache/2/14323-ti4it.com.JPG

بعد ذلك سوف يتصل التقرير مع الداتا بيس .. وسوف يعرض لك الاعمدة في الجدول ومعها بيانات يتم عرضها لكي يبن لك انه تم الاتصال

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

الجدول ..

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 903x465 and weights 29KB.http://www.ti4it.com/vb/imgcache/2/14324-ti4it.com.JPG

الان لنجرب التقرير ... اذهب من خلال القائمة Build واختر منها Build Solution

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 903x465 and weights 29KB.http://www.ti4it.com/vb/imgcache/2/14324-ti4it.com.JPG

بعد ان ترى انه تم Build Succeeded

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 651x273 and weights 13KB.http://www.ti4it.com/vb/imgcache/2/14325-ti4it.com.JPG

قم بتشغيل المشروع من خلال الزر للتشغيل

http://www.ti4it.com/vb/imgcache/2/14326-ti4it.com.JPG

لكي يتم اظهار البيانات الفعلية التي في الجدول المختار ..

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 818x352 and weights 19KB.http://www.ti4it.com/vb/imgcache/2/14327-ti4it.com.JPG

الان انتهينا من كل شيء .. ولكن ... السؤال يطرح نفسه .. ماذا لو اردت ان اطبع سجل واحد ؟ ماهي الطريقة ..
وفي هذا الشرح يعرض لنا كل البيانات .. وكذلك الاتصال ليس مربوط بالكود وكذلك قاعدة البيانات .. فهذا يعني عندما تقوم بتشغيل المشروع على جهاز آخر سوف لا يتعرف على الداتا بيس ..

وهذه مشكلة ..

اذا لنقوم بكتابة الكود لكي يكون التقرير ديناميكي .. وليس البيانات تكون فيه Static

اذهب إلى صفحة الـ Default.aspx واضغط دبل كلك على الصفحة لكي تنفتح لك نافذة الكود ...
إذهب مباشرة إلى أعلى صفحة الكود وقم بكتابة هذه التعريفات للاتصال بقواعد البيانات والكرسيتال ريبوت ..

كود PHP:



Imports System.Data.OleDb

Imports System.Data

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Collections




ثم اذهب الى الـ بيج لود Page_Load وقم بكتابة هذه الكود التالي .. سوف نقوم بالتعديل عليه ..




كود PHP:


Dim rpt As New ReportDocument

rpt.Load(Server.MapPath("CrystalReport.rpt"))



Dim db As New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath(".\\db1.mdb"))

db.Open()

Dim SQLs As String
SQLs = ""
Dim ad As New OleDbDataAdapter(SQLs, db)
Dim da As New DataSet
ad.Fill(da, "Earth")








rpt.SetDataSource(da)

rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPa perOrientation

CrystalReportViewer1.ReportSource = rpt







db.Close()

ad.Dispose()

da.Dispose()











كود:

كما هو موضح ...

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 970x589 and weights 61KB.http://www.ti4it.com/vb/imgcache/2/14328-ti4it.com.JPG

لاحظ اخي القارئ .. اننا تركنا هذا المتغير فارغ ..

كود

كود:
كود PHP:

SQLs = ""








سوف نقوم باخذ جملة الاستعلام من خلال الكرستال ريبوت .. ونضع له شرط ..

الان اجعل الكرستال ريبوت هو المحدد حاليا CrystalReport.rpt ثم من خلال شريط الادوت الذي يكون على اليسار الخاص للكرستال ريبوت Field Explorer

http://www.ti4it.com/vb/imgcache/2/14329-ti4it.com.JPG

اضغط على Show SQL Query لكي تظهر لك هذه النافذة

http://www.ti4it.com/vb/imgcache/2/14330-ti4it.com.JPG

قم بنسخ جملة الاستعلام.. لكي نقوم بالتعديل عليها .. الان ارجع إلى صفحة الديفولت .. Default.aspx.vb وقم باسناد جملة الاستعلام إلى المتغير SQLs وسوف نسنده بشرط معين بشرط

رقم الـ ID= 1 لكي يصبح المتغير قيمة المتغير بهذا الشكل

كود

كود:
كود PHP:

SQLs = "SELECT `tbl_Client`.`ID`, `tbl_Client`.`C_Name`, `tbl_Client`.`C_Phone`, `tbl_Client`.`C_Address`FROM `tbl_Client` `tbl_Client` Where ID=1"








وبهذه الطريقة انتهينا ..

قم بتشغيل التقرير .. لكي يظهر لك فقط سجل واحد .. كما هو مبين ..

http://www.alremal.com/vb/images/statusicon/wol_error.gifهذه الصورة تم تصغيرها تلقائيا . إضغط هنا لمشاهدة الصورة بحجمها الطبيعى 918x371 and weights 17KB.http://www.ti4it.com/vb/imgcache/2/14331-ti4it.com.JPG

شرح بعض الاكواد للتوضيح

استخدمنا امر


كود

كود:
Imports System.Data.OleDb
Imports System.Data




لتعريف مكتبات الربط بقواعد البيانات

وكذلك اظهار او اتاحة الخصائص للتقرير

كود

كود:
كود PHP:

Imports CrystalDecisions.CrystalReports.Engine

Imports CrystalDecisions.Shared

Imports System.Collections











عرفنا متغير من نوع rpt لياخذ خصائص التقرير

كود
كود:

كود PHP:
Dim rpt As New ReportDocument
rpt.Load(Server.MapPath("CrystalReport.rpt"))


ومن ثم التعرف على مسار التقرير وتحديده .. في الموقع ..

وهنا
كود


كود:
كود PHP:

Dim db As New OleDbConnection("Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath(".\\App_Data\\db1.mdb"))

db.Open()

Dim SQLs As String

SQLs = "SELECT `tbl_Client`.`ID`, `tbl_Client`.`C_Name`, `tbl_Client`.`C_Phone`, `tbl_Client`.`C_Address`FROM `tbl_Client` `tbl_Client` Where ID=1









"

كود:

قمنا بتعرف متغير للاتصال ومن ثم فتحه .. وعرفنا متغير SQLs لياخذ لكي يتحفظ بقيمة او بالاحرى يخزن جملة الاستعلام في المتغير ..
ومن ثم عرفنا الادبتر .. لكي يتم تنفيد جملة السكيول
وعرفنا الداتا ست لكي ياخذ القيم المرجعه من خلال الادبتر ..

كود
كود:

كود PHP:

Dim ad As New OleDbDataAdapter(SQLs, db)
Dim da As New DataSet
ad.Fill(da, "tbl_Client")





ثم بعد ذلك اسندنا قيمة الداتا ست إلى التقرير .لياخذ البيانات منها

كود

كود:


rpt.SetDataSource(da)









ثم بعد ذلك كتبنا هذا الكود التالي لكي يهيئ التقرير للطباعة بالعرض والطول ..

كود
كود:


rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPa perOrientation





ويمكن تجاهل هذا السطر ..

ثم اسندنا لعارض الكرستال ريبوت مصدر الريبوت وهو الـ rpt لكي يتعرف على الريبوت

كود

كود PHP:
كود:

CrystalReportViewer1.ReportSource = rpt





ومن ثم اغلاق كلاُ من

كود

كود:


db.Close()

ad.Dispose()
da.Dispose()











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

سجلات على حسب القيمة المرجعة من الاستعلام ..

الان الكود بلغة الـ C#.NET

ضع هذا الكود في اعلى النافذة

كود


كود:


using System;

using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
using System.Collections;






كود:

وضع هذا الكود في البيج لود ..
كود PHP:


ReportDocument rpt = new ReportDocument();
rpt.Load(Server.MapPath("CrystalReport.rpt"));


String SQLs;
SQLs = "SELECT `tbl_Client`.`ID`, `tbl_Client`.`C_Name`, `tbl_Client`.`C_Phone`, `tbl_Client`.`C_Address`FROM `tbl_Client` `tbl_Client` Where ID=1";

String strConnection = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + Server.MapPath(".\\App_Data\\db1.mdb");
//create a new OleDbConnection object using the connection string
OleDbConnection objConnect = new OleDbConnection(strConnection);
//open the connection to the database
objConnect.Open();
OleDbDataAdapter ad = new OleDbDataAdapter(SQLs, objConnect);
DataSet da = new DataSet();
ad.Fill(da, "tbl_Client");

rpt.SetDataSource(da);
rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.DefaultPa perOrientation;
CrystalReportViewer1.ReportSource = rpt;


objConnect.Close();
ad.Dispose();
da.Dispose();




وهذا والله أعلم..



منقول للفائدة