PDA

View Full Version : مشکل در کریستال ریپورت



محسن بابائی
شنبه 05 خرداد 1386, 15:58 عصر
سلام .
می خوام توی کریستال ریپورت تاریخ رو توی همه صفحات نشون بدم . یه عبارتی می خوام که یه textbox یا label داشته باشم که مقدار تاریخ را بهش پاس بدم . مثلا این طوری .
CrystalReport1.TextBox1.Text=MyDate
راه حل با کد ؟

DonetKarvb
شنبه 05 خرداد 1386, 16:35 عصر
شما نمیتونید اینکار رو بکنید.
باید توی کریستال ریپورت یک پارامتر ایجاد کنید و از طریقه برنامه پارامتر رو پاس بدهید به کریستال.
در این تاپیک در مورد پاس دادن پارامتر صحبت شده
Pass Parmeters (http://dotnetsource.com/fa/forum/default.aspx?g=posts&t=170)

maryam_80
شنبه 05 خرداد 1386, 17:03 عصر
برای نمایش تاریخ در تمام صفحات باید فیلد مربوطه را در page header قرار دهید تا در تمام صفحات نمایش داده شود.
برای ارسال پارامتر هم باید در ابتدا در کریستال یک پارامتر از طریق parameter Fields ایجاد کنید (فراموش نکیند که پارامتر ساخته شده را در page header قرار دهید).و نام آنرا مثلا Dates قرار دهید.
حالا داخل برنامه کد زیر رابنویسید:


Dim rpt AsNew reportname
Dim frm AsNew FrmReportView
Dim paramFields AsNew ParameterFields
Dim paramField AsNew ParameterField
Dim discreteVal AsNew ParameterDiscreteValue
Dim rangeVal AsNew ParameterRangeValue
Dim ReportDomain AsString
paramField.ParameterFieldName = "Dates"
discreteVal.Value = yourdatefunction
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)
frm.CrystalReportViewer1.ParameterFieldInfo = paramFields
frm.CrystalReportViewer1.ReportSource = rpt

و یا از طریق زیر مقدار را ارسال نمایید:



Dim rpt AsNew reportname
rpt.SetParameterValue("Dates", YourDateFunction))
frm.CrystalReportViewer1.ReportSource = rpt


توجه داشته باشید که نام پارمتر را باید عینا در برنامه بنویسید چون حروف کوچک و بزرگ مهم است

محسن بابائی
شنبه 05 خرداد 1386, 17:52 عصر
اینا که گفتین تست می کنم جواب می دم .
یه سوال دیگه هم داشتم .
من توی دیتابیس (Sql)فیلد های پول را از نوع Float گرفتم . می خوام توی کریستال ریپورت بهش فرمت بدم . مثلا اگر مقدار 3000 را در فیلد از نوع Float ذخیره کنیم در کریستال ریپورت به صورت 3000.00 نمایش می ده . حالا چه طوری بهش فرمت بدم که به صورت 3.000 نمایش بده ؟
به عبارتی اعشار دو رقمی که نشون می ده را نشون نده .
مرسی .

محسن بابائی
شنبه 05 خرداد 1386, 20:39 عصر
مشکل اولم که دوستان کمک کردند حل شد . مرسی
در مورد دومی کمک کنید.

محسن بابائی
شنبه 05 خرداد 1386, 21:22 عصر
سلام
یه مشکل جدید از داخل مشکلی که حل شد زد بیرون .
اون تکه کدی که گزاشته بودین را به شکل یک تابع نوشتم . به شکل زیر

Function SetCurrentValuesForParameterField(ByVal myParameterFiledName As String, ByVal CurrentValue As String) As ParameterFields
Dim paramFields As New ParameterFields
Dim paramField As New ParameterField
Dim discreteVal As New ParameterDiscreteValue
Dim rangeVal As New ParameterRangeValue
paramField.ParameterFieldName = myParameterFiledName
discreteVal.Value = CurrentValue
paramField.CurrentValues.Add(discreteVal)
paramFields.Add(paramField)
Return paramFields
و در داخل برنامه به این شکل صداش زدم .


CrystalReportViewer1.ParameterFieldInfo = SetCurrentValuesForParameterField("ReportDate",txtDate.text)

معلوم است که نام ParameterField و مقدار آ ن به تابع فرستاده شده و تابع paramFields را بر میگرداند و در ParameterFieldInfo قرار می گیرد .
کد بالا برای زمانی که کریستال ریپورت فقط یک پارامتر داشته باشد کار می کند ولی وقتی که دوتا شد . مثلا به شکل زیر


CrystalReportViewer1.ParameterFieldInfo = SetCurrentValuesForParameterField("UserName",CurrentUser)


صفحه ای باز شده پیغام you Can provide a single value for this parameter . enter the value you want to include . به همراه نام پارامتر اولی که ارسال شده نمایش داده می شود .

حالا کجای کار اشکال داره ؟

maryam_80
یک شنبه 06 خرداد 1386, 17:13 عصر
دوست عزیز
چون شما هر بار با فراخوانی تابع مربوطه دارید پارامترها را می سازید در نتیجه مقادیر قبلی از بین میرود.بهتر است به جای استفاده از تابع و تمام آن دستورات از راه حل دوم به شکل زیر استفاده کنید. :



rpt.SetParameterValue("ReportDate",CurrentDate)
rpt.SetParameterValue("Names", Username)
CrystalReportViewer1.ReportSource = rpt

محسن بابائی
یک شنبه 06 خرداد 1386, 21:06 عصر
دوست عزیز
چون شما هر بار با فراخوانی تابع مربوطه دارید پارامترها را می سازید در نتیجه مقادیر قبلی از بین میرود.بهتر است به جای استفاده از تابع و تمام آن دستورات از راه حل دوم به شکل زیر استفاده کنید. :



rpt.SetParameterValue("ReportDate",CurrentDate)
rpt.SetParameterValue("Names", Username)
CrystalReportViewer1.ReportSource = rpt


سلام
البته من مشکل را با ابزار textbox کریستال ریپورت به شکل زیر حل کردم


Dim txtReportDate As CrystalDecisions.CrystalReports.Engine.TextObject
txtReportDate = CRp_CustomersList.Section1.ReportObjects("txtReportDate")
txtReportDate.Text=MyDate

اما راه حل دوم شما یه کمی اشکال داره . موقع اجرا فرمی ظاهر شده و مقدار پارامتر ها را می گه که وارد کنید .
به هر حال از اینکه راهنمایی کردین ممنون . انشا الله که جبران می کنم .

محسن بابائی
یک شنبه 06 خرداد 1386, 21:21 عصر
راستی سوالی که توی پست 4 مطرح کردم هم بی جواب مونده . در ضمن در مورد فیلدهای از نوع bigint هم به همین صورت که گفتم هست.