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

مساعده في reportviewer

مغلق
بدأه omar_sabha في 5 يوليو 2007 · 8 رد · 1,627 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ارجو مساعدتي للضروره القصوى

انا اعمل على asp.net 2003

وواجهتني مشكلة ارجو مساعدتي فيها ، ساقوم بشرح ما اريد

في البداية نفرض ان هناك صفحات

aspx (ولكل من هذه الصفحات report معين وفي كل من هذه ال report يكون عدد محدد من ال parameter )

وصفحة reportviewer وتقارير .rpt

اريد في اي من صفحات ال aspx ( كل صفحة تحتوي على parametr او اكثر وبالطبع في كل صفحة تكون ال parameter محدده ) اريد عند ارسال ال parameter الى صفحة reportviewer ان تقوم هذه الصفحة

(reportviewer) باستقبالها dynamically اي انه ربما ابعت برميتر واحد وربما 2 او 3 او ربما بدون اي برميتر

فاريد صفحة reportviewer ان تستقبلها dynamically باستخدام مثلا loop

وان تتم معاجتها بالطريقه المطلوبه ومن ثم طباعه التقرير .

ارجو المياعده للضروره ولكم جزيل الشكر

#2

هل من منقذ

#3

وين الشباب

#5

سلام..

الأخ : عمر

أستطيع تنفيذ الفكرة التي تحدثت عنها ..

و لكني في الواقع أعمل على بيئة 2005 لبرنامج الفيجوال ستيديو ..

على كل حال ..

هنالك سؤال يجب أن اطرحه حتى أكتب لك مثال توضيحي : و هو ما هو نوع مصدر البيانات التي تستخدمه ؟؟ مثلا : Report Document .. و أيضا هل تستخدم Data Set لجلب البيانات ؟ .....

أم هل تستخدم الـ Wizard ..

إلى أن يصلني ردك ..

رجاء اطلع على الوصلات التالية :

1- دليل الدورات التدريبة للـ MSDN\

http://msdn2.microsoft.com/en-us/library/m...530(VS.80).aspx

2- الطرق المختلفة لربط البيانات بالـ Crystal Reports ..

http://msdn2.microsoft.com/en-us/library/m...662(VS.80).aspx

، تحياتي لك .

#6

عذرا .. لقد سبقني الأخ SCool ..

:huh:

#7

شكرا لكم

بالنسبة لمشاركة جوليانا فانا مصدلر البيانات هو sql server 2005

واحضر البيانات باستخدام dataset

اما مشاركة الاخ scoool فاسقوم الان بالاطلاع عليها

ولكم جزيل الشكر

#8

طيب خلينا نحاول شوي فيها :

أولا فلنفترض أنك تعمل Load للربوت بطريقة Push ( أقصد باستخدام SetDataSource على سبيل المثال )

طبعا الآن وبافتراض أن البارامتر يرسل عن طريق Redirect فسوف نستقبله كالتالي :

 Sub fillParameter(ByVal rpt As ReportDocument, ByVal paramVal As String, ByVal paramFld As String)

		Dim param As New ParameterDiscreteValue
		Dim values As New ParameterValues
		param.Value = paramVal
		values.Add(param)
		rpt.DataDefinition.ParameterFields(paramFld).ApplyCurrentValues(values)

	End Sub

طبعا كل ما عليك هو استقبال البرامتر وارساله الى الدالة السابقة ،،

ولازم يتم هذا الكلام بعد عمل Binding للـ CrystalViewr

تم تعديل هذه المشاركة بواسطة Scoool في 15 يوليو 2007 في 07:43

#9

:) أهلا عمر

أولا : اطلع المرفق التالي و قم بتحميله.

crystal.rar

ثانيا : إليك الخطوات التي اتبعتها

1- إنشاء قاعدة البيانات من نوع SQL Data Base.

2- إضافة البيانات للقاعدة .

3- إنشاء XMLSchema و إضافة الجداول المراد عمل لها تقرير (الإضافة تتم بسحب الجدول من الـ Server Explorerلصفحة الـ XMLSchema).

4- إنشاء صف مساعد يقوم بتوفير جمل الاستفسار و ا لاتصال بقاعدة البيانات ، و يسمى DataSetConfiguration.

للمزيد من التوضيح ، راجع الدرس التالي:

http://msdn2.microsoft.com/en-us/library/ms227647(VS.80).aspx

كود الـ DataSetConfiguration :

Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient

Public Class DataSetConfiguration
	Private Const CONNECTION_STRING As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"

	Private Const QUERY_STRING As String = "SELECT * FROM member"

	Private Const DATATABLE_NAME As String = "member"


	Private Const DIRECTORY_FILE_PATH As String = "C:\crystal\App_Code\"


	Public Shared ReadOnly Property MemberDataSet() As DataSet

		Get
			Dim myDataSet As DataSet = New DataSet()
			myDataSet.ReadXmlSchema(DIRECTORY_FILE_PATH & "XMLSchema.xsd")
			Dim mySQLDbConnection As SqlConnection = New SqlConnection(CONNECTION_STRING)
			Dim mySQLDbDataAdapter As SqlDataAdapter = New SqlDataAdapter(QUERY_STRING, mySQLDbConnection)
			mySQLDbDataAdapter.Fill(myDataSet, DATATABLE_NAME)
			Return myDataSet
		End Get
	End Property


End Class

1- نقوم بإنشاء Crystal Reports ، يعتمد على بارميتر( لا يتوجب علي شرح كيفية القيام بذلك ، لأنه من اختصاص منتدى التقارير ، و لكني سوف أذكر الخطوات بإختصار) .

أ‌- اتبع تعليمات المعالج حتى تصل إلى تحديد نوع مصدر البيانات .

ب‌- قم بفتح المجلد " Project Data" ، من ثم " ADO.Net Data Sets" ، من ثم حدد الجدول المطلوب ، و قد لا يكون ظاهرا لديك ، لذا قم بالآتي : افتح مجلد " Create New Connection" ، من ثم " ADO.Net" بالضغط مرتين ، بعد ذلك قم بتعبئة البيانات للمربع الحوار الظاهر لديك ، و ذلك بتحديد مسار الـ XML Schema ، و الصف الذي تستخدمه و هو هنا DataSetConfiguration ، بعدها الـ DataSet و هي MemberDataSet.

ت‌- من الـ Field Explorer ، حدد الـ Parameter Fields لتضيف بارميتر.

ث‌- سوف يظهر لك مربع حوار تحدد فيه نوع البارميتر ، و هنا سوف نضعه من نوع Discrete value ، مع ملاحظة تحديد المربع " Allow multiple values " لأننا سوف نستخدم أكثر من قيمة .

لمزيد من التفاصيل ، راجع الموضوع التالي :

http://msdn2.microsoft.com/en-us/library/ms227780(VS.80).aspx

2- ادارج صفحة الـ ASPX، من ثم إدراج مكون Crystal Report Viewer ، و هنا بالنسبة للبارميتر جعلتها ضمن List Box لإمكانية تعدد الاختيارات ، و كذلك أضفت زر يقوم بعملية الـ PostBack و وظائف أخرى . الكود المستخدم :

'1
Imports System.Data
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports System.Collections
Partial Class _Default
	Inherits System.Web.UI.Page
'2
	Private Report As ReportDocument
	Private Const PARAMETER_FIELD_NAME As String = "ID"

'3
	Private Sub ConfigureCrystalReports()
		Dim myArrayList As ArrayList = New ArrayList()
		Report = New ReportDocument()
'3-A		
Dim reportPath As String =Server.MapPath("CrystalReport.rpt")
		Report.Load(reportPath)
		Dim myDataSet As DataSet
 '3-B	   
If Not Page.IsPostBack Then
			myArrayList.Add("1")
			Session("myArrayList") = myArrayList
		Else
			myArrayList = CType(Session("myArrayList"), ArrayList)

		End If
'3-C
		myDataSet = DataSetConfiguration.MemberDataSet
		Report.SetDataSource(myDataSet)
'3-D
Report.SetParameterValue(PARAMETER_FIELD_NAME,myArrayList.ToArray())
'3-E		
myCrystalReportViewer.ReportSource = Report
	End Sub
'4	
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
		ConfigureCrystalReports()
	End Sub

'5
  Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
		Dim myArrayList As ArrayList = New ArrayList()

		For Each item As ListItem In ListBox1.Items
			If item.Selected Then
				myArrayList.Add(item.Value)
			End If
		Next
		Session("myArrayList") = myArrayList
		Report.SetParameterValue(PARAMETER_FIELD_NAME, myArrayList.ToArray())
		myCrystalReportViewer.ReportSource = Report

	End Sub
End Class

1- قمت بتعريف المكتبات للـ Crystal Report .

2- قمت بتعريف المتغيرات الرئيسة ، و هي :

أ‌- مصدر البيانات للتقرير ، و قد أخترت ReportDecument الذي هو أكثر ملائمة للـ DataSet.

ب‌- اسم حقل البارميترات .

3- الدالة ConfigureCrystalReports التي تقوم بتمهيد مستعرض التقرير .

و التي تحتوي على الأتي:

أ‌- تحديد مسار التقرير و الذي يفترض أن يتواجد بنفس المجلد الموجود به بالصفحة .

ب‌- تحديد قيمة افتراضية للبارميتر ، عند عرض التقرير لأول مرة، لاحظ هنا تم استخدام الـ Session ، و الذي يفترض أن تمنع العودة للقيمة الافتراضية عند استخدام الأداة الخاصة بتكبير حجم عرض البيانات.

ت‌- تحديد الـ Data Set الخاصة بالجدول المراد عرضه، و التي أنشئت مسبقا .

ث‌- تحديد البارميتر التي سوف يتم تمريره .

ج‌- بعد تحديد الخصائص لمصدر البيانات ، نقوم بإعطاء قيمته للمكون.

4- هذه الدالة تقوم بتمهيد عمليه عرض التقرير ، و المفترض عملها قبل تحميل الصفحة أي ( Page Load).

5- تقوم هذه الدالة باستقبال البارميترات للتقرير التي تم تحديدها و إعادة عرضه.

، أرجو أن يكون الشرح واضح بالنسبة لك .

، حاول القراءة أكثر ضمن هذا الموضوع ، حتى يمكنك التغيير على الكود بحريه و سهولة تامة.

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

http://msdn2.microsoft.com/en-us/library/m...697(VS.80).aspx

، و لدروس أخرى مفيدة ضمن هذا المجال اطلع على الآتي :

http://msdn2.microsoft.com/en-us/library/m...726(VS.80).aspx

، تحياتي لك.

هذا الموضوع مغلق.

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