تقييم الموضوع :
  • 1 أصوات - بمعدل 1
  • 1
  • 2
  • 3
  • 4
  • 5
Easy way to make a report using CrystalReport
#1
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
صدق الله العلي العظيم


السلام عليكم ورحمة الله وبركاته
سنتعلم في هذا الموضوع كيفية بناء تقارير في الVS2010 بلغة الC# خطوة خطوة وبالصور و بطريقة سهلة ان شاء الله ,وأنا اعلم أن هنالك الكثير من المقالات حول صناعة التقارير في هذا المنتدى لكن اغلبها بلغة الVB.Net وقلما تجد مقالة تتحدث عن التقارير بلغة الC#.NET, لهذا كتبت هذه المقالة حول بناء التقارير بلغة الC# مع قاعدة بيانات SQL Server 2008 R2 والCrystal Report.
اولا عليكم بتنزيل برنامج الSAP Crystal Reports, version for vs2010 من هذا الرابط:
CrystalReportForVS2010



ثانيا ولسبب فصل Microsoft برنامج التقارير عن برنامج الvs2010 ظهرت هنالك مشاكل تتعلق بتشغيل ادوات الCrystal report ولكل تعمل تقارير كريستال فعليك تحويل الـ.NET Framework الى 3.5 او الى اصدار اقل من ذلك

بسم الله نبدأ

سنركز على ثلاثة محاور في هذا الموضوع في كيفية بناء التقارير:

اولا: طباعة صف واحد فقط يحدده المستخدم من ال.Datagridview
ثانيا: طباعة الصفوف المحددة فقط في الDatagridview من قبل المستخدم.
ثالثا: طباعة جميع الصفوف الموجودة في الجدول.

اولا: طباعة صف واحد يحدده المستخدم:
المعنى واضح حيث سيقوم المستخدم عن طريق الMouse بتحديد عنصر معين او صف معين لكي يقوم بطباعته

الان تابع معي هذه الخطوات:

1- نفتح برنامج الSQL Server 2008 R2 ثم نقوم باضافة قاعدة بيانات جديدة عن طريق الDatabase ثم New database باسم stdnames ونضغط على اشارة الزائد من الstdnames ونختار Tables ثم NewTable ونضيف الحقول التالية (id, name, age) ونخزن الجدول باسم names كما في الصورة:


بعد ذلك نقوم بRightClick على dbo.names من الTables للsdtnames ونختار Edit Top 200 Rows لكي نضيف البيانات الى الجدول فتكون بالشكل التالي:

طبعا هذه البيانات المدخلة افتراضية لغرض التعلمSmile

الان نذهب الى هذا المسار: C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA

ونقوم بنسخ الملفين stdnames و stdnames_log الى مخرجات البرنامج.
الى هنا انتهينا من عمل الجدول ,والان سننتقل الى الVS2010 حيث نفتح مشروع جديد ونقوم بتسميته Printing Report نقوم باضافة الادوات اللازمة الى الفورم فتكون كما في الصورة:



1- فتح الاتصال مع قاعدة البيانات
2- لعرض البيانات في الDataGridview
3- لطباعة عنصر واحد فقط
4- لطباعة اما كل الصفوف وذلك اذا حدد المستخدم All او الصفوف المحددة اذا حدد المستخدم Only selected
2- اضافة CrystalReport.rpt لطباعة صف واحد فقط
لعمل ذلك اتبع الصور الاتية:




بعد الضغط على Add نضغط OK ثم Finish لتظهر لنا الصورة التالية:


من الParameter Fields نضيف ثلاثة حقول وذلك بRightClick على ParameterFields ثم New ثم تقوم بتسمية الباراميتر باسماء الحقول التي تريد طباعتها او اسماء مشابهة بعد ذلك عن طريق الMouse نعمل Drag&Drop للباراميترات ونضيفها الى الSection3(Details) ,انظر الى الصورة التالية:


الى هنا انتهينا من تهيئة التقرير لطباعة بيانات صف واحد فقط.

الان نضيف Form جديد ونسميه PrintOneForm ونضيف الاداة CrystalReportViewer اليه ونغير خاصية الModifire للاداة الى Public
ثم نكتب الكود الاتي في الPrintOne


PHP كود :
//لاختيار الصف المحدد
            
DataGridViewRow r dataGridView1.CurrentRow;
            
//لاختيار الخلية المحددة للصف المحدد من قبل المستخدم
            
int id = (int)r.Cells["id"].Value;
            
string name = (string)r.Cells["name"].Value;
            
int age = (int)r.Cells["age"].Value;
           
            
//////////////////////////////////////////////////////////////

            //انشاء instance من PrintOneForm          
            
PrintOneForm pof = new PrintOneForm();
            
//انشاء instanceمن التقرير
            
PrintOneReport por = new PrintOneReport();
            
//ارسال البيانات الى التقرير عن طريق دالة الSetParameterValue 
            
por.SetParameterValue("id"id);
            
por.SetParameterValue("name"name);
            
por.SetParameterValue("age"age);
            
//ربط التقرير باداة الReportViewer
            
pof.crystalReportViewer1.ReportSource por;
            
pof.Show(); 

وتكون كود الConnectكالآتي:
PHP كود :
private void Connectbtn_Click(object senderEventArgs e)
        {
            if (
Table())
            {
                
MessageBox.Show("Connection succeed");
            }
            else
            {
                
MessageBox.Show("Connection failed");
            }
        } 

دالة الTable
PHP كود :
public bool Table()
        {
            
sqlcon = new SqlConnection(constr);
            
sqladpt = new SqlDataAdapter(selectsqlcon);
            
/////////////////////////////////////////
            
try
            {
                
sqlcon.Open();
                
myset = new DataSet();
                
sqladpt.Fill(myset);
                
mytable myset.Tables[0];
                return 
true;
            }
            catch(
Exception ex)
            {
                
MessageBox.Show(ex.Message);
                return 
false;
            }
            finally
            {
                
sqlcon.Close();
            }
        } 

كود اظهار البيانات في الDatagridview


PHP كود :
private void Showbtn_Click(object senderEventArgs e)
        {
            
dataGridView1.DataSource mytable;
        } 

المتغيرات العامة

PHP كود :
string constr = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|stdnames.mdf;integrated security=true;Connect Timeout=30;";
        
string select "select * from names";
        
SqlConnection sqlcon;
        
SqlDataAdapter sqladpt;
        
DataTable mytable,t;
        
DataSet myset;
        
DataRow rowr;
        
DataColumn c

ثانيا وثالثا : طباعة الصفوف التي يحددها المستخدم او طباعة كل الصفوف في الجدول

1- نضيف CrystalReport.rpt جديد كما في الصورة رقم1 ونقوم بتسميته PrintAllReport و بعد الضغط على Add ثم Ok نعمل كما في الصورة التالية:




حيث نختار Create New Connection ثم OLE DB(ADO) فتظهر لنا الصورة التالية


بعد اختيار Next نفعل كما الصورة التالية:


1- نختار اسم الserver
2- نختار integrated security في حالة عدم وجود username and password اما غير ذلك نكتب الاسم والرقم السري بدون اختيار الIntegrated Security
3- اختيار قاعدة البيانات
ثم Next وFinish
الان تظهر لنا هذه الصورة :



نفعل تماما كما في الصورة اعلاه
ثم نفعل كما في الصورة التالية طبعا بعد الضغط على Next



ثم Next فتظهر لنا التقرير بهذه الصورة


كما تلاحظون ان الباراميترات اضيفت تلقائيا الى التقرير
نضيف Form جديد ونسميه PrintAllForm ونضيف عليه اداة الCrystalReportViewer ونجعل خاصية Modifireللاداة Public
ثم نكتب الكود الاتي في الPrintAll


PHP كود :
private void PrintAllbtn_Click(object senderEventArgs e)
        {
            
PrintAllForm paf = new PrintAllForm();
            
PrintAllReport par = new PrintAllReport();
            
//Only Selected في حالة اختيار الخيار
            
if (onlyrdbtn.Checked)
            {
                
= new DataTable();//انشاء جدول جديد للصفوف المحددة
                
int ij;
                
DataGridViewSelectedRowCollection rc dataGridView1.SelectedRows;// Datagridviewاختيار الصفوف المحددة من ال 

                //انشاء اعمدة بعدد الاعمدة المختارة من الجدول واضافتها الى الجدول الجديد
                
for (0mytable.Columns.Counti++)
                {
                    
= new DataColumn(mytable.Columns[i].ToString());
                    
t.Columns.Add(c);
                }
                
                for (
0rc.Counti++)
                {
                    
//واضافتها الى الجدول الجديد Datagridviewانشاء صفوف بعدد الصفوف المختارة من قبل المستخدم من ال
                    
t.NewRow();
                    
t.Rows.Add(r);
                    for (
0dataGridView1.ColumnCountj++)
                    {
                        
t.Rows[i][j] = (rc[i].Cells[j].Value);//اضافة العناصر من الصفوف المحددة الى الصفوف الجديدة في الجدول الجديد
                    
}
                }
                
//هي مصدر البيانات للصفوف المحددة فقط tتحديد مصدر البيانات للتقرير وهنا الجدول
                
par.SetDataSource(t);
            }
            
//All في حالة اختيار الخيار 
            
else if (allrdbtn.Checked)
            {
                
//هي مصدر البيانات mytable  تحديد مصدر البيانات للتقرير وهنا الجدول الرئيسي 
                
par.SetDataSource(mytable);
            }
            
paf.crystalReportViewer1.ReportSource par;
            
paf.Show();
        } 

الشرح مع كل سطر من الكود وتجدون البرنامج في المرفقات
الى هنا وبفضل الله وصلنا الى نهاية الموضوع حيث تعلمنا كيفية بناء التقارير بلغة الC# بصورة مبسطة و اتمنى ان تكونوا قد استفدتم ان شاء الله وانتظر ردودكم الجميلة واستفساراتكم القيمة للمناقشة الجميلة ولا تنسوني ووالدي من صالح دعواتكم راجيا الله تعالى ان يوفقنا وإياكم لمراضيه


_______________________________________________________________
ملاحظة: المقالة من المنتدى السابق وسأرفع المرفقات حال تحويلها الى لغة VB.NET
_________________________________________________________________
الرد }}}
#2
مشكور على الشرح
كفيت ووفيت
رحم الله والديك والله يوفقك ان شاء الله
الرد }}}
تم الشكر بواسطة: Sajad , 30june
#3
السلام عليكم و رحمة الله و بركاته




ما شاء الله عليك أخي سجـّـــاد،


أنتم لوحدكم مكتبة علمية يحرص كل مبرمج على تتبع مواضيعكم.




السلام عليكم و رحمة الله و بركاته
الرد }}}
تم الشكر بواسطة: Sajad , 30june
#4
ماشاء الله عليك شرح مرتب وجميل جدا . أعجبني طريقت طرحك للموضوع .

سؤال : مارأيك هل تقارير الكريستيال ريبورت أفضل أم التقارير المدموجة مع الفيجوال وماهو السهل بينهما ؟


تحياتي
الرد }}}
تم الشكر بواسطة: Sajad , hoob computer , 30june
#5
السلام عليكم ورحمة الله وبركاته

جزاكم الله خيرا اخواني الاعزاء على التعليقات الجميلة

أما بالنسبة لسؤالك اخي العزيز العزابي:
إقتباس :سؤال : مارأيك هل تقارير الكريستيال ريبورت أفضل أم التقارير المدموجة مع الفيجوال وماهو السهل بينهما ؟

برأيي التعامل مع أي تقرير يعتمد على مستخدمه

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

أما في حال استخدام تقارير كريستال فيجب تنصيب البرنامج الخاص بتقارير كريستال لكل يعمل

بارك الله فيكم

الرد }}}
تم الشكر بواسطة: hoob computer , 30june
#6
السيد الفاضل  
طلب الكثير من الزملاء  
عمل الموضوع ب  فيجوال بيسك  2008   
ربنا يبارك فيك
الرد }}}
تم الشكر بواسطة: 30june
#7
السلام عليكم ورحمة الله وبركاته


الامثلة بالمرفقات بلغتي #C و VB


الملفات المرفقة
.zip   CrystalSample.zip (الحجم : 299.07 ك ب / التحميلات : 691)
.zip   CrystalSampleVB.zip (الحجم : 319.69 ك ب / التحميلات : 1,073)
الرد }}}
تم الشكر بواسطة: 30june , mera.55
#8
الاستاذ الفاضل Sajad

بعد التحية والشكر علي اهتمامك

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

اكيد فيه طريقة

شكرا
الرد }}}
تم الشكر بواسطة: 30june
#9
تفضل اخي العزيز

انظر الى الرابط التالي:

mdf to mdb or accdb
الرد }}}
تم الشكر بواسطة: 30june
#10
السيد الفاضل
هذا التحويل يتطلب وجود السكول علي الجهاز
السكول صعب جدا واضافته علي الجهاز يتطلب خطوات معينة

ماذا لو لم يوجد السكول
كيف يتم تحويل السكول الي الاكسس
الرد }}}
تم الشكر بواسطة: 30june



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


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