![]() |
|
سؤال :كريستال ريبورت مع سي شارب - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40) +--- قسم : قسم اسئلة التقارير والطباعة تحت بيئة الـ.NET (http://vb4arb.com/vb/forumdisplay.php?fid=71) +--- الموضوع : سؤال :كريستال ريبورت مع سي شارب (/showthread.php?tid=6085) |
سؤال :كريستال ريبورت مع سي شارب - AbaAlHaitham - 17-10-12 السلام عليكم لدي هنا مثال بالفيجوال بيزك وفيه Form عدد 2 يوجد Dataset لتحمل نسخة من قاعدة البيانات في الفورم الاول يوجد داتاجرد فيو لعرض البيانات ويوجد زر Button ينقلنا للفورم الثاني حيث يوجد CrystalReportViewer1 كود حدث النقر على الزر كود : [SIZE=6][align=left]انا جربت المثال بالفيجوال بيزك واشتغل تمام , لكني اعمل مشاريعي بالسي شارب .. لذلك حاولت اعمل المثال بالسي شارب ولم استطع . بالطبع جربت عملية التحويل عن طريق موقع للتحويل من VB الى C# واستخدمت كامل صفحة الكود ولم يفدني بشيء . (علما انني كما قلت قبل قليل جربت المثال بالفيجوال بيزك واشتغل تمام). هنا رفعت المثال الناجح بالفيجوال بيزك وطلبي هو نفس المثال بالسي شارب ,, سؤال :كريستال ريبورت مع سي شارب - AbaAlHaitham - 18-10-12 في المثال السابق (VB.net ) تستطيع عمل اكثر من Report باستخدام نفس الـ CrystalReportViewer الموجود بالفورم الثاني Form2 وذلك عند وجود Button بالفورم الاول لكل Report نحتاجه أي لانحتاج لعمل فورم جديد لكل Report أما في سي شارب فالذي توصلت اليه هو انشاء Report بنفس الفورم (Form2 ) واذا احتجت Report آخر سأضطر لاضافة فورم آخر السبب ان كود ربط الـ Report الى CrystalReportViewer وضعته بنفس الفورم في الـ Form2_Load ولم استطع وضعه في حدث النقر على زر بالـ Form1 . المطلوب مايلي (في سي شارب) : عندما انقر على زر موجود بالفورم الاول يعرض لي التقرير بـ CrystalReportViewer الموجودة بالفورم الثاني على أن لايتم استخدام حدث تحميل الفورم الثاني (كي يتسنى استخدام أكثر من Report على نفس الCrystalReportViewer ) ...... (لو أمكن تعريف DataTable أو Dataset في كلاس Class لاستطعت حل المشكلة , ولكن لم أنجح بتعريف اي منهما ) سؤال :كريستال ريبورت مع سي شارب - AbaAlHaitham - 24-10-12 وجدت الحل والحمد لله , كمايلي : من Add new Items نضيف DataSet نسميها DataSet_A ونفتحها بوضع التصميم ونضيف اليها DataTable نسميه Table1 ثم نضيف له الحقول بحيث تكون نفس حقول الجدول بقاعدة البيانات (واذا كان هناك اكثر من جدول .. ننشئ اكثر من DataTable ) ولاننسى لكل حقل ان نضع نوع البيانات ويفضل نفس تصميم جدول قاعدة البيانات . ملاحظة : الداتاسيت هنا هي مجرد صورة فارغة عن قاعدة البيانات , وذلك لكي نربطها بالتقرير ليأخذ التقرير حقوله منها ....... ثم نضيف التقرير CrystalReport1 وعند مرحلة مصدر البيانات .. نختار Project Data ثم من ADO.net Datasets نجد اسم الجدول Table1 فنختاره . ... نضيف Class1 نعرف بها: الاتصال Con - و rpt من CrystalReport1 الذي سيكون المصدر للـ CrystalReportViewer1- نضع بالكلاس ايضا دوال بعدد التقارير التي نريدها .. بحيث كل دالة تجهز المتغير rpt ببيانات مختلفة . بالفورم الاول نضع أزرار Buttons ايضا بعدد التقارير التي نريدها , بحيث اذا نقرنا على الزر الاول (مثلا) سيقوم بعرض الفورم الثاني الذي يحوي الـ CrystalReportViewer1 وهي بدورها تقوم بعرض التقرير الاول . ولكن كيف نحدد لها أي زر تم ضغطه من الفورم الاول ( ونحن في الفورم الثاني) هنا نحتاج متغير عام للـ Solution نقوم بتعريفه بمنطقة الاعدادات Settings كما يلي : نضغط باليمين على اسم الـ Solution ونختار خصائص , نختار البند Settings يظهر جدول نضيف له المتغير وليكن X : name: X Type: int scope: user value: 0 ونحفظ . نذهب لحدث النقر على الزر الاول ( بالفورم الاول ) ونكتب به مايلي : حيث App1 اسم الـ Solution : كود : [align=left][SIZE=5][align=left] App1.Properties.Settings.Default.X = 1;في حدث النقر على الزر الثاني نفس الكود السابق ولكن بدل الواحد نضع 2 وهكذا الازرار الاخرى اذا كان لدينا اكثر من تقريرين.. ثم نذهب للفورم الثاني وبحدث تحميل الفورم Form2_Load نكتب : كود : [SIZE=5][align=left]أرفقت المثال كاملا (سي شارب - فيجوال ستوديو 10 ) |