تقييم الموضوع :
  • 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 ك ب / التحميلات : 48)
الرد }}}}
تم الشكر بواسطة:
#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 ك ب / التحميلات : 76)
الرد }}}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية جمع اكثر من field في الكريستال ريبورت نسيم 9 162 03-12-16, 10:15 PM
آخر رد: محمود بكرى
  كيف يمكننى جعل مربع النص يحتوى الارقام الكبيرة فى الكريستال ريبورت محمود بكرى 1 58 06-11-16, 11:14 AM
آخر رد: محمود بكرى
  الطباعة بواسطة الكريستال ريبورت باستخدام الاجراء المخزن حماده السعيد 7 888 10-10-16, 10:34 AM
آخر رد: محمد فاوي
  مشكلة فى تسطيب كريستال ريبورت 2013 ل vb2010 abdelsalam 1 224 16-08-16, 06:14 PM
آخر رد: Kian Tech
  [سؤال] كيف يمكننى طباعة كل الفواتير مصممه بالكريستال ريبورت وvb.net? محمود بكرى 4 302 21-06-16, 11:46 PM
آخر رد: محمود بكرى
  هل الكريستال ريبورت متواجد بنسختي طالب 22 0 119 18-06-16, 08:41 AM
آخر رد: طالب 22
  عاجل ومهم - مشكلة في الكرستال ريبورت بسام عماد 1 205 06-06-16, 02:05 PM
آخر رد: Adrees
  سؤال : بخصوص ReportViewr في اللغة العربية ؟ abid 2 186 01-06-16, 09:50 PM
آخر رد: abid
  [سؤال] كيفية وضع الباركود داخل الكريستال ريبورت احمد عبد الحكيم 8 892 01-06-16, 09:02 PM
آخر رد: علي كعبي
  كيف ارسل الصور الى الكريسال ريبورت عن طريق Parameter Fields aftfm 4 271 31-05-16, 10:38 PM
آخر رد: aftfm

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


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