السبت، 4 يونيو 2016

عمل تقرير فيجوال بيسيك وداتا بيز اكسيس

بـــســـم اللـــــــه

كيفية اضافة تقرير لويندوز ابليكيشنيمكنك من طباعة معلومات معينه و الاحتفاظ بنسخة word / excel / pdfبواسطة فيجوال بيسيك وداتابيز اكسيس

Make Report By Visual Basic And Database Access




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

المطلوب هو عمل تقرير التقرير دا هيكون عباره عن تابل وتكستات ولابل كيف نستدعيها في التقرير حتى نتمكن من طباعتها والاحتفاظ بنسخه منها تابع الخطوات :





[ 1 ] افتح برنامج Microsoft Access
كريت Database جديدة ثم كريت Table جديد






[ 2 ] افتح برنامج Visual Studio
ثم New Project






[ 3 ] كريت فورم جديد :
كليك يمين على اسم البروجيكت 
ثم Add
ثم Windows Form






[ 4 ] Add






[ 5 ] اضافة Report :
كليك يمين على اسم البروجيكت
ثم Add
ثم New Item






[ 6 ] اختار Report ثم اضغط Add






[ 7 ] اسحب ReportViewer واتركه في Form2






[ 8 ] اضغط على السهم الصغير واختار اخر اختيار
Dock In Parent Container
بحيث ان الريبورد ياخد ال Full Width & Full Height لل Form






[ 9 ] استدعي الريبورت على Form2
اضغط على السهم واختار اول اختيار
Report.Report1.rdlc






[ 10 ] من الادوات اسحب
Button / 4 TextBox / 6 Lable






[ 11 ] نسق الفورم وغير الاسماء وخليهم زي كدا:
( انا بشرح باختصار لاني مش موضوعنا غير حاجه واحده كيفية عمل الريبورت )
فلو فيه اي سؤال بخصوص التصميم او اي شيئ اترك تعليق وان شاء الله اجاوبك اذا كنت اعرف الاجابه
انا لو شرحت بالتفصيل كل شيئ امر عليه مش هخلص ولا 100 صفحه حتى
وحاولت اشرح فديو لكن كامتازيا لقيته خلص ^ ^
احسن لاني بتحرج اصلا اشرح بصوتي بركه جت منه
المهم
خلي التنسيق زي كدا ↓↓
انا لحد دلوقتي مكتبتش ولا كود دا كله بحضر اللي محتاجاه

وخليت ال name بتاعهم زي ما كاتباه في الصورة






[ 12 ] بعد ما حضرنا اللي محتاجينه هنبدأ نكتب الاكواد العاديه
زي العمليات الحسابيه والتاريخ
ونعمل فاليديشن بحيث انك لو مكتبتش حاجه يبقى فيه Default Value للتكستات والليبل دا
يعني الخطوة دي بردو هختصرها
لاني مش قضيتي دلوقتي اقولك ازاي تجمع ارقام او تكتب تاريخ

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


كليك مرتين على الفورم واكتب كود التاريخ :

 txtDate.Text = Now.ToString()








[ 13 ] كليك مرتين على txtNum1 واكتب الكود بتاع العمليه الحسابيه
وكرر الخطوة مع txtNum2
كود جمع التكستين مع بعض والناتج يظهر في اللابل :
lblSolution.Text = (CDec(IIf(Decimal.TryParse(txtNum1.Text, Nothing), txtNum1.Text, "0")) + (CDec(IIf(Decimal.TryParse(txtNum2.Text, Nothing), txtNum2.Text, "0")))).ToString()







[ 14 ] مش ناوية اعدل التاريخ او اكتبه بنفسي
يبقى الاحسن يكون Hidden 
عاوزاه يظهر في الريبورت على طول
ملوش لازمه اشوفه كل شوية في فورم تاني
علشان كدا انا هعمله :
Visible: False






[ 15 ] كليك مرتين على الباتون واكتب الفاليديشن
بحيث لو ال Title كان فاضي يكتب هو مكانه ...............
لان لو تركت شيئ فاضي واستدعيته في الريبورت بيظهر رسالة خطأ
فمن اولها كدا اعمل فاليديشن If Condition بيخدمك في النقطه دي احسن
وبعد كدا
في نفس الباتون في الاخر
هتعمل شو دايالوج للفورم الثاني اللي هيظهر فيه الريبورت :

If txtTitle.Text = String.Empty Then
            txtTitle.Text = ".................."
        End If
        If lblSolution.Text = String.Empty Then
            lblSolution.Text = "00"
        End If
        Form2.ShowDialog()







[ 16 ] مدام ناوي تستخدم اي عنصر خارج الفورم الموجود فيه
يبقى لازم تغير خاصيه من خصائيه
ModiFiers 
هتلاقي الافتراضي بتاعها على
Friends 
انت خليها
Public
حددتهم كلهم مرة واحده وغيرت لبابليك زي الصورة ↓↓
( بدأنا في الجد ومن اول هنا هحاول اوضح بالتفصيل كل شيئ لان كل اللي جي هيكون تبع التقرير )






[ 17 ] اي خطوة جديده اعمل كنترول شيفت B
بحيث تحفظ التغييرات وفي نفس الوقت تشيك هل فيه اخطاء ولا لا
لو مظهرش اي ايرور في الاسفل يبقى كمل شغلك تمام






[ 18 ] اضغط F5 وجرب البرنامج لحد كدا
تأكد من المعادلة صحيحه ولا لا
وتأكد ان الباتون بيفتح الفورم الثاني اللي عليه الريبورت
طبعا لسه الريبورت مش متحضر
بس عاوزين نشوف لحد كدا تمام ولا لا
جميل جدا
لحد دلوقتي كويس





[ 19 ] افتح Report1.rdlc
كليك يمين واختار Insert
ثم Table






[ 20 ] Next






[ 21 ] Next






[ 23 ] New Connection






[ 24 ] Browse






[ 25 ] اختار الداتا بيز اللي انشأتها في الاول اللي فيها جدول وحيد :)
ثم كليك اون Open






[ 26 ] للتأكيد اضغط Test Connection ثم OK






[ 27 ] OK






[ 28 ] Next






[ 29 ] NO






[ 30 ] Next






[ 31 ] حدد التابل وكليك اون Finish





[ 32 ] OK






[ 33 ] هتلاقي التابل ظهر 
لو عاوز تضيف كولمن جديد اضغط كليك يمين على اي كولمن موجود
ثم Insert Column
ثم Left






[ 34 ] اسحب كولمن كولمن من التابل اللي انت لسه مستدعيه من الداتابيز
واتركه في المكان اللي انت عاوزه يظهر فيه في التابل اللي موجود على الريبورت






[ 35 ] سيليكت عليهم جميعا ومن بروبيرتس 
TextAlign: Center






[ 36 ] كليك يمين واختار من Insert
Text Box





[ 37 ] كرر الخطوة السابقة حتى تحصل على 6 تكستبوكسات
وخليهم زي الصورة
واعملهم بوردر لو حبيت :
Solid






[ 38 ] اضغط من الكيبورد على F5 
وشوف البرنامج وصل لايه
 راائع التابل ظهر باقي نستدعي التكستات علشان نقول مبروك :)






[ 39 ] غيرت تنسيق اول رو في التابل






[ 40 ] كليك مرتين على الفورم Form2
علشان نكتب الكود اللي هيبعت القيم اللي عاوزينها للريبورت






[ 41 ] في اعلى مكان خالص دي مساحة ال Puplic الخاصه بالفورم
اكتب فيها
Option Strict On
Imports Microsoft.Reporting.WinForms






[ 42 ] اكتب الكود :
Dim myDate = New ReportParameter("paramDate", Form1.txtDate.Text)
ثم
ReportViewer1.LocalReport.SetParameters(myDate)
مع العلم ان :
myDate
و
paramDate
اختياريه
ممكن تكتبهم اي شيئ
زي اي متغير 
وباقي الكود دا سينتاكس الخاص باستدعاء العناصر للريبورت
ثم كرر الخطوة دي مع باقي اللي عاوز تستدعيهم ↓ Title و Solution






[ 43 ] ملحوظه مهمه
بعد كتابة الجزء دا
Dim myDate = New ReportParameter("paramDate", Form1.txtDate.Text)
هتلاقيه فيه 2 متغير
الاول هو myDate
والثاني هو paramDate
لازم تكتب myDate تاني تحت في الكود اللي بعده دا
ReportViewer1.LocalReport.SetParameters(myDate)
مينفعش تكتب حاجه من عندك ومينفعش تاخد التاني
لازم تحافظ على الترتيب دا
وكذلك طبعا مع باقي العناصر اللي عاوز تستدعيها في الريبورت
وبالنسبه ل
paramDate
هييجي وقته في الخطوات القادمه
لاننا بنكتبه في الريبورت نفسه مش الفورم زي اللي حصل مع myDate

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






[ 44 ] افتح الريبورت
ثم كليك يمين على Parameters
ثم Add Parameter





[ 45 ] اكتب في خانة ال Name
paramDate
ثم OK
( دي المتغير التاني اللي كنت بقولك عليه هنحتاجه وهنكتبه في الريبورت )






[ 46 ] هتلاقيه ظهر تحت Parameters






[ 47 ] كرر مع باقي الايتيم بحيث في الاخر تحصل على 3 براميتر كما موضح بالصورة:






[ 48 ] اسحب كل براميتر واتركه في التكستبوكس المطلوب انه يظهر بداخلها:






[ 49 ] هيكونو بالشكل دا:






[ 50 ] شغل البرنامج 
هتلاقي الريبورت فيه التابل والتكستات ظهرت
وانا تعمدت اغير نوع التكستات مرة تكون استرينج ومرة تاريخ ومرة من لابل يحتوى رقم
بحيث كدا استدعينا كل الانواع 
لو حبيت تطبع التقرير اضغط على علامة الطابعه
ولو حبيت تحفظ نسخه اضغط على Save واختار نوع الملف
سواء Word / Excel / PDF

تـــم انشاء ريبورت واستدعاء انواع بيانات مختلفه من اماكن مختلفه من الداتابيز ومن فورم اخرى






اهلا وسهلا بكم جميعا Em An