الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تصميم تقارير RDLC من الألف إلى الياء برمجياً ، هل من حل ؟

بدأه عاشق للبرمجة في 17 ديسمبر 2011 · 7 رد · 5,759 مشاهدة · في تصميم وبرمجة التقارير
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ...

قمت بطرح سؤال في السابق على هذا الرابط :

/index.php?showtopic=249357

لنعد قليلا إلى تقارير مايكروسوفت القديمة ....

كانت التقارير أشبه م يكون بالفورم ، نقوم بإرسال القيم التي نريدها إلى الفورم مباشرة دون الحاجة إلى ربط التقرير بـ Datasource معين ....

التقارير الجديدة : لابد من إنشاء داتا سيت dataset وربط التقرير بهذا الداتا سيت ، سئمت من هذه الطريقة المتعبة ...

لنتخيل أن هناك جدول اسمه EmployeeInfos يحتوي على التالي : Name , Gender, ID , Salary , Depart ,

وما أريد أن يظهر التقرير لي البيانات وفق الاستعلام الذي أرغب به ، فمثلا لو أردت الاستعلام وفق الجنس إما ذكر أو أنثى أو الكل وفق الاستعلام الذي أكتبه في الـ DataSet الذي أنشأته من خلال Add Query ثم استعلام اختيار Select ثم كتابة الاستعلام التالي :

SELECT * 
FROM EmployeeInfos
WHERE Gender = ?

وقمت بتصميم فورم وأضفت فيه ReportViewer وحددت الداتا سيت السابق ، وأضفت ComboBox1 وفيه (ذكر ، أنثى ، الكل ) ، ثم أضفت السب التالي :

Public Sub AnyThing()
        Dim adapter As New DataSet1TableAdapters.EmployeeInfosTableAdapter()
        Dim table As New DataSet1.EmployeeInfosDataTable
        adapter.FillBy(table, ComboBox1.Text)
        Dim myNewdatasource As ReportDataSource = New ReportDataSource("DataSet1", CType(table, DataTable))
        Me.ReportViewer1.LocalReport.DataSources.Clear()
        Me.ReportViewer1.LocalReport.DataSources.Add(myNewdatasource)
        Me.ReportViewer1.LocalReport.Refresh()
        Me.ReportViewer1.RefreshReport()
    End Sub

وفي حدث SelectedIndexChanged للكومبو بوكس أقوم باستدعاء السب ، في الواقع هذا التقرير يعمل مع ( بنين - بنات ) ولكن مع ( الكل ) لا يعمل ، شئ منطقي لأنه لا توجد قيمه اسمها ( الكل ) في حقل Gender ، سيقول قائل : قم بإنشاء استعلام جديد في الـ DataTable الخاص بالجدول بدون شرط وقم باستدعائه ، وأقول حل جيد ، ولكن ليس هذا ما أريده ، أريد أن أتعامل مع التقرير بالكود من الصفر إلى الياء من تحميل التقرير الـ RDLC في الـ ReportViewer إلى إسناد DataSource و DataSet إلخ ، من الصفر إلى الياء ، كما كان العمل على التقارير السابقة .

قمت بعمل كل شئ ، إلا أن التقارير للأسف لا يمكن تصميمها بدون إضافة Dataset لها ، وهذا ما لا أريده ...

هل من حل جزاكم الله خير ؟؟؟ وأعتذر على الإطالة .....

1

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#2

السلام عليكم ..

  1. يمكن إنشاء التقرير من قاعدة البيانات .. بدون الــ DataSet ..و في الرابط يوضح ذلك (المثال على كريستال , لكن نفس الطريقة مع rdlc)

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#3
houssam11350_11350 كتب:

السلام عليكم ..

  1. يمكن إنشاء التقرير من قاعدة البيانات .. بدون الــ DataSet ..و في الرابط يوضح ذلك (المثال على كريستال , لكن نفس الطريقة مع rdlc)

أخي العزيز houssam11350_11350 وعليكم السلام ورحمة الله وبركاته ..

شكرا على ردك أخي الكريم ....

لاحظ التالي أخي الكريم :

اقتباس
أولا : تقرير من DataSet :

يكون مصدر بيانات التقرير هو dataSet يتم ملؤها بشكل يديوي بالبيانات المطلوبة :

اتبع الخطوات التالية :

نقرة يمينية على المشروع Add ثم New Item ثم نحدد Data ثم dataSet فيتم فتحها في وضع التصمصم .

تم إضافة الداتاسيت كأداة ، أريد تعريف الداتا سيت برمجيا وربطها بالتقرير ...

هل من طريقة ؟؟

بارك الله فيك وشكرا على ردك أخي العزيز ...

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#4

السلام عليكم ..

  1. اكمل قراءة المشاركة حتى تصل إلى :
    اقتباس
    ثانيا : تقرير من قاعدة البيانات مباشرة :
    حيث لا داعي لإضافة dataSet بل التقرير يأخذ حقوله من قاعدة البيانات ..و لكن طبعا عند التمرير .. يجب أن نحدد له الـ datasource من داخل التطبيق ..يعني هذا باختصار يوفر علينا إنشاء dataSet لتصميم التقرير ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

و الله يا أخي الكريم مع تقارير مايكروسوفت القديمة كانت المور سهلة جدا

مثلا انا لي مدة و أنا أبحث في كيفية التعامل مباشرة مع الأدوات الموجودة في التقرير و لم أفلح

في vb6 مثلا كان سهلا تمرير اي قيمة موجودة في أداة كتكست بوكس في الفورم الى ادات اخرى موجودة في التقرير ي بالكود.

#6
abdelmajid tahiri كتب:

و الله يا أخي الكريم مع تقارير مايكروسوفت القديمة كانت المور سهلة جدا

مثلا انا لي مدة و أنا أبحث في كيفية التعامل مباشرة مع الأدوات الموجودة في التقرير و لم أفلح

في vb6 مثلا كان سهلا تمرير اي قيمة موجودة في أداة كتكست بوكس في الفورم الى ادات اخرى موجودة في التقرير ي بالكود.

وايضا مع الدوت نت اسهل واقوي اخي العزيز بالنسبه لسؤال التعامل مع التقارير بدون انشاء الداتا سيت يوجد طريقة للتعامل مع التقارير علي الشبكات المحلية او احتي ولم اجرب هذه wan عن طريق

تقنية xml

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

نفترض ان لدينا جدول واسمه t1 وبه مجموعة من الاعمدة

فاليك الكود

قبل كود الخلية عرف الاتي

Imports CRAXDDRT
Imports System.Data.OleDb

iالفضاء هذا CRAXDDRT لاجل الكريستال ريبورت 10 ولو كان لديك كريستال 9 سوف يكون مختلف في حرف واحد D

dim cn as new oledbconnection(your connection string)
dim cmd as new oledbcommand
dim DA as new oledbdataadabtor
dim DSet as new datasaet
dim Report as new CRAXDDRT.Application 
dim value as string

 If cn.State = ConnectionState.Open Then cn.Close()
        cn.Open()

        cmd.Connection = cn
 cmd.CommandType = CommandType.Text
cmd.CommandText = "select * from t1"
DA.SelectCommand = cmd
        DA.Fill(DSet, "t1")

 value = System.Windows.Forms.Application.StartupPath

        DSet.WriteXml(value & "\dSet.xml", XmlReadMode.Auto)

        Report = ReportFile.OpenReport(value & "\yourReportName.rpt")

        Report.Database.SetDataSource(DSet)
Form2.crystalViewer1.ReportSource = Report
        Form2.crystalViewer1.ViewReport()

ارجو ان تسامحني ان كان في الكود خطأ فإذا ظهر لك خطأ فأنا تحت امرك لابداء اي استفسار واتمني ان ينفعك :)

#7

الحل الأفضل والذي خلصت إليه من الفلترة واستخدام Expressionl Builder .

أخي hisham saad شكرا على الرد ...

لا أفضل تقارير الكريستال لمشاكلها الكثيرة في أجهزة العملاء ...

... إذا كنت تعتقد أن مشاركتي مفيده ، الرجاء قم بتقييمي ...

%2525D8%2525A8%2525D8%2525B5%2525D9%252585%2525D8%2525A9%252B%2525D8%2525B9%2525D9%252584%2525D9%252585%252B%2525D9%252588%2525D8%2525B5%2525D8%2525B1%2525D8%2525AE%2525D8%2525A9%252B%2525D8%2525A7%25

#8
عاشق للبرمجة كتب:

السلام عليكم ورحمة الله وبركاته ...

قمت بطرح سؤال في السابق على هذا الرابط :

/index.php?showtopic=249357

لنعد قليلا إلى تقارير مايكروسوفت القديمة ....

كانت التقارير أشبه م يكون بالفورم ، نقوم بإرسال القيم التي نريدها إلى الفورم مباشرة دون الحاجة إلى ربط التقرير بـ Datasource معين ....

التقارير الجديدة : لابد من إنشاء داتا سيت dataset وربط التقرير بهذا الداتا سيت ، سئمت من هذه الطريقة المتعبة ...

لنتخيل أن هناك جدول اسمه EmployeeInfos يحتوي على التالي : Name , Gender, ID , Salary , Depart ,

وما أريد أن يظهر التقرير لي البيانات وفق الاستعلام الذي أرغب به ، فمثلا لو أردت الاستعلام وفق الجنس إما ذكر أو أنثى أو الكل وفق الاستعلام الذي أكتبه في الـ DataSet الذي أنشأته من خلال Add Query ثم استعلام اختيار Select ثم كتابة الاستعلام التالي :

SELECT * 
FROM EmployeeInfos
WHERE Gender = ?

وقمت بتصميم فورم وأضفت فيه ReportViewer وحددت الداتا سيت السابق ، وأضفت ComboBox1 وفيه (ذكر ، أنثى ، الكل ) ، ثم أضفت السب التالي :

Public Sub AnyThing()
        Dim adapter As New DataSet1TableAdapters.EmployeeInfosTableAdapter()
        Dim table As New DataSet1.EmployeeInfosDataTable
        adapter.FillBy(table, ComboBox1.Text)
        Dim myNewdatasource As ReportDataSource = New ReportDataSource("DataSet1", CType(table, DataTable))
        Me.ReportViewer1.LocalReport.DataSources.Clear()
        Me.ReportViewer1.LocalReport.DataSources.Add(myNewdatasource)
        Me.ReportViewer1.LocalReport.Refresh()
        Me.ReportViewer1.RefreshReport()
    End Sub

وفي حدث SelectedIndexChanged للكومبو بوكس أقوم باستدعاء السب ، في الواقع هذا التقرير يعمل مع ( بنين - بنات ) ولكن مع ( الكل ) لا يعمل ، شئ منطقي لأنه لا توجد قيمه اسمها ( الكل ) في حقل Gender ، سيقول قائل : قم بإنشاء استعلام جديد في الـ DataTable الخاص بالجدول بدون شرط وقم باستدعائه ، وأقول حل جيد ، ولكن ليس هذا ما أريده ، أريد أن أتعامل مع التقرير بالكود من الصفر إلى الياء من تحميل التقرير الـ RDLC في الـ ReportViewer إلى إسناد DataSource و DataSet إلخ ، من الصفر إلى الياء ، كما كان العمل على التقارير السابقة .

قمت بعمل كل شئ ، إلا أن التقارير للأسف لا يمكن تصميمها بدون إضافة Dataset لها ، وهذا ما لا أريده ...

هل من حل جزاكم الله خير ؟؟؟ وأعتذر على الإطالة .....

لدي نفس المشكلة ولا اجد حل ارجوا من الاخوة الذين لديهم الخبرة ايفادتنا

♥ Some people make the world special just by being in it ♥

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…