PDA

View Full Version : حرفه ای: آموزش کامل نحوه ثبت تاریخ شمسی در کریستال ریپورت با استفاده از ارسال پارامتر



behrooz69
پنج شنبه 01 اسفند 1392, 14:21 عصر
سلام . برای ارسال پارامتر تاریخ شمسی به کریستال ریپورت 2 راه داری .

یکیش اینه که بری تابع تاریخ فارسی برای کریستال ریپورت رو بگیری که اون یکم مشکل داره و پیشنهاد نمیشه .

دومیش اینه که با استفاده از ارسال پارامتر به کریستال اینکارو انجام بدی .

شما برای اینکار نیاز به کامپونت تاریخ شمسی Hm_FarsiCalender دارید که ضمیمه کردم.

خوب اول توی کریستال ریپروتت یه پارامتر درست کن به هر اسمی که میخوای مثلا : PrintDate ، یا PersianDate ، یا هرچی دوست داشتی . و اون پارامتر رو بکش

تو Header کریستال ریپورتت یا هرجایی که میخوای تاریخش چاپ شه .

116922

حالا برگرد به فرمی که میخوای تاریخ رو با استفاده از پارامترش بفرستی ، همون فرم پرینتتو میگم .

1 Lable بزار توی صفحت مثلا به نام LblTarikhPrint .

توی Form_Load صفحت این کد رو بنویس :

LblTarikhPrint.Text = HM_FarsiCalendar.FarsiDate.FarsiToday.FullNameDate

اینجا اومدم با استفاده از کامپوننت Hm_FarsiCalender تاریخ فارسی رو به لیبل خودم نسبت دادم.

حالا مرحله آخر :
توی دکمه ای که کد های پرینت و ارسال به کریستال ریپورتت هست برو و بعد از Report.SetDataSource این تیکه کد رو بنویس :

rpt.SetParameterValue("PersianDate", LblTarikhPrint.Text)

توضیح : اینجا من فرض رو بر این گرفتم که اسم پارامتر تاریخ رو توی کریستال PersianDate و اسم لیبل رو تو فرم ارسال گزارشتون LblTarikhPrint گذاشتید .

قسمت اول اسم پارامتریه که تو فرم کریستال مربوطه خودتون هست .

قسمت دوم مقداریه که واسه پارامتر خودتون توی کریستال ریپورتتون میفرستید .


اینم تیکه کد کامل ارسال گزارش و پارامتر برای چاپ در کریستال ریپورت :

Dim rpt As New اسم کریستال ریپورت شما
Dim myconnection As SqlConnection
Dim mycommand As New SqlCommand
Dim myda As New SqlDataAdapter
Dim myds As New دیتاست شما
Try
myconnection = New SqlConnection(کانکشن دیتابیس شما)
mycommand.Connection = myconnection
mycommand.CommandText = "SELECT * from جدول شما WHERE(فیلد مورد نظر=@فیلد مورد نظر)"
mycommand.Parameters.Add("@فیلد مورد نظر", SqlDbType.NVarChar, 50).Value = CboSearchByName.Text

mycommand.CommandType = CommandType.Text
myda.SelectCommand = mycommand
myda.Fill(myds, "جدول شما")
rpt.SetDataSource(myds)
rpt.SetParameterValue("PersianDate", LblTarikhPrint.Text)
FrmGozareshgiri.CrystalReportViewer1.ReportSource = rpt
FrmGozareshgiri.ShowDialog()

Catch ex As Exception
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

دیگه این تیکه کد توضیح نداره هرچی لازم بود توش هست و واضحه


اینم کامپوننت تاریخ شمسی : 116923


امیدوارم واضح و مفید بوده باشه . یا حق

نسرین2000
شنبه 03 اسفند 1392, 14:09 عصر
توضیحتون کامل و خوب بود ولی نمی دونم کجا دارم اشتباه می کنم که جواب نمی ده
طبق توضیحات شما یک پارامتر به نام PrintDate درست کردم و در header گذاشتم
تو فرم اصلی برنامه یک لیبل گذاشتم و با استفاده از کد شما تاریخ رو فارسی کردم مانند زیر :
LblTarikhPrint.Text = HM_FarsiCalendar.FarsiDate.FarsiToday.FullNameDate
بعد از اون توی دکمه گزارش ( دکمه ای که با استفاده از اون گزارش گیری انجام می شود ) کدهای زیر را نوشتم با توجه به اینکه من گزارشم را با استفاده از ویزار خود کریتال ریپورت آماده کردم فقط کد ارسال پارامتر رو نوشتم .
Dim rpt As New shabaneh

Try



rpt.SetParameterValue("PrintDate", lbltarikhprint.Text)


Catch ex As Exception
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
ولی بعد از اجرای برنامه باز هم از من مقدار پارامتر printdate پرسیده می شود ؟ یعنی خودش نمی تونه این پارامتر رو فراخوانی کند ؟
کجای کار ایراد داره ؟

behrooz69
یک شنبه 04 اسفند 1392, 00:26 صبح
سلام . چرا مقدار میگیره خودش با مقداری که شما بهش میدی .

ببین lbltarikhprint.Text با LblTarikhPrint.Text شما فرق داره ها .

دوما برنامه و کد درسته کار شما اشکال داره ! شما برنامه رو ران میکنی بعد Stop میکنی ببینی کریستال تغییر کرده پارامترش یا نه ؟؟؟ واقعا این کارو میکنی ؟؟

باید یه فرمی بزاری یه تولباکس نمایش کریستال ریپورت بزاری CrystalReportViewer1 باید یه مقداری رو بهش پاس بدی تا نشون بده . از کجا میخواد مقدار بگیره عزیز جان ؟؟ وقتی فرمت Closed شده

اینو استفاده کن تست کن ببین مشکل از کجاس . وقتی کریستال ریپورت و پارامتر ازت درخواست مقدار میکنه یعنی هیچ مقداری رو بهش پاس ندادی
Dim rpt As New shabaneh

Try



rpt.SetParameterValue("PrintDate", LblTarikhPrint.Text)
FrmGozareshgiri.CrystalReportViewer1.ReportSource = rpt
FrmGozareshgiri.ShowDialog()


Catch ex As Exception
MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

نسرین2000
دوشنبه 05 اسفند 1392, 08:45 صبح
بی نهایت ممنون درست شد