تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
سؤال :كريستال ريبورت مع سي شارب
#1
السلام عليكم
لدي هنا مثال بالفيجوال بيزك
وفيه Form عدد 2
يوجد Dataset لتحمل نسخة من قاعدة البيانات
في الفورم الاول يوجد داتاجرد فيو لعرض البيانات ويوجد زر Button ينقلنا للفورم الثاني حيث يوجد CrystalReportViewer1

كود حدث النقر على الزر

كود :
[SIZE=6][align=left]
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click


        Dim rpt As New CrystalReport1

        Dim dt As New DataTable

        dt = AccDBDataSet.Tables("employers")

        rpt.SetDataSource(dt)

        Form2.CrystalReportViewer1.ReportSource = rpt

        Form2.Show()

End Sub[/align][/SIZE]

انا جربت المثال بالفيجوال بيزك واشتغل تمام ,
لكني اعمل مشاريعي بالسي شارب .. لذلك حاولت اعمل المثال بالسي شارب ولم استطع .


بالطبع جربت عملية التحويل عن طريق موقع للتحويل من VB الى C# واستخدمت كامل صفحة الكود ولم يفدني بشيء .


(علما انني كما قلت قبل قليل جربت المثال بالفيجوال بيزك واشتغل تمام).

هنا رفعت المثال الناجح بالفيجوال بيزك وطلبي هو نفس المثال بالسي شارب ,,


الملفات المرفقة
.rar   W.rar (الحجم : 217.81 ك ب / التحميلات : 86)
الرد }}}
تم الشكر بواسطة:
#2
في المثال السابق (VB.net ) تستطيع عمل اكثر من Report باستخدام
نفس الـ CrystalReportViewer الموجود بالفورم الثاني Form2
وذلك عند وجود Button بالفورم الاول لكل Report نحتاجه
أي لانحتاج لعمل فورم جديد لكل Report

أما في سي شارب فالذي توصلت اليه هو انشاء Report بنفس الفورم (Form2 )
واذا احتجت Report آخر سأضطر لاضافة فورم آخر
السبب ان كود ربط الـ Report الى CrystalReportViewer وضعته بنفس الفورم في الـ Form2_Load
ولم استطع وضعه في حدث النقر على زر بالـ Form1 .

المطلوب مايلي (في سي شارب) :
عندما انقر على زر موجود بالفورم الاول
يعرض لي التقرير بـ CrystalReportViewer الموجودة بالفورم الثاني
على أن لايتم استخدام حدث تحميل الفورم الثاني
(كي يتسنى استخدام أكثر من Report على نفس الCrystalReportViewer )


......
(لو أمكن تعريف DataTable أو Dataset في كلاس Class لاستطعت حل المشكلة , ولكن لم أنجح بتعريف اي منهما )
الرد }}}
تم الشكر بواسطة:
#3
وجدت الحل والحمد لله , كمايلي :
من 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;

            App1.Properties.Settings.Default.Save();[/align][/SIZE][/align]

في حدث النقر على الزر الثاني نفس الكود السابق ولكن بدل الواحد نضع 2
وهكذا الازرار الاخرى اذا كان لدينا اكثر من تقريرين..

ثم نذهب للفورم الثاني وبحدث تحميل الفورم Form2_Load نكتب :


كود :
[SIZE=5][align=left]

private void Form2_Load(object sender, EventArgs e)

        {
            Class1 cls = new Class1();  

            if (App1.Properties.Settings.Default.X == 1)  

            {
                cls.SetRpt();

                crystalReportViewer1.ReportSource = cls.rpt;
            }  

            else

                if (App1.Properties.Settings.Default.X == 2)

                {

                    cls.SetRpt2();

                    crystalReportViewer1.ReportSource = cls.rpt;
                  
                }
        }[/align][/SIZE]
حيث SetRpt2 , SetRpt هي دوال الكلاس Class1 والتي تقوم بتجهيز المتغير rpt ليحمل بيانات محددة ( كما نريد ) من قاعدة البيانات , وكل دالة تم انشاؤها من أجل تقرير مختلف .


أرفقت المثال كاملا (سي شارب - فيجوال ستوديو 10 )


الملفات المرفقة
.rar   App1.rar (الحجم : 228.62 ك ب / التحميلات : 133)
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  تغيير لون السجلات في كريستال ريبورت بناء على قيم معينة صالح عبدالله 4 439 16-02-24, 09:30 PM
آخر رد: صالح عبدالله
Question [VB.NET] هل يمكن الحصول على رابط تحميل كريستال ربوت يعمل مع فجوال البيسك نت ؟ Microformt 0 538 22-11-23, 07:58 PM
آخر رد: Microformt
  [سؤال] مشكلة في طباعة footer تقرير كريستال ريبورت i1982 5 1,146 29-03-23, 11:30 PM
آخر رد: sanyor77
Question [سؤال] سوال في الكرستال ريبورت ali bajmmal 0 385 17-02-23, 03:34 PM
آخر رد: ali bajmmal
  دالة التفقيط داخل الكريستال ريبورت bassant 6 5,453 08-02-23, 04:26 PM
آخر رد: kezzat
  هل يوجد امكانية لعمل متغير لكل record في الكريستال ريبورت bassant 0 647 29-11-22, 12:47 PM
آخر رد: bassant
  كيفية تصميم التقرير الكريستال ريبورت للطباعة على جانبين الورقة (وش وظهر) bassant 3 935 22-11-22, 12:22 PM
آخر رد: Taha Okla
Photo [سؤال] مشكلة في اتصال كريستال ريبورت محمد صادق حسن 1 1,353 15-12-21, 02:41 PM
آخر رد: تركي الحلواني
  كريستال ريبورت Lathe1 0 1,220 01-10-21, 12:34 PM
آخر رد: Lathe1
  تغيير اتجاة صفحة الكريستال ريبورت aftfm 0 1,615 06-09-21, 05:34 PM
آخر رد: aftfm

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


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