# مباحث متفرقه برنامه نویسی > گزارش سازی با Crystal Report >  سوال در مورد پشتیبانی crystalreport  از تاریخ شمسی

## coldsummer

سلام دوستان
من می خوام تو ی گزارشاتم از تاریخ شمسی استفاده کنم یعنی کاربر تاریخ این گزارش رو به 
صورت پویا مشاهده کنه می خواستم بدونم این عمل با crystalreport‌چه جوری امکان پذیره
ضمنا من C#‎.net 2005  کار می کنم 
اگر کسی پاسخ منو می دونه لطف کنه منو راهنمایی کنه  
Here is the start point

----------


## sm

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

موفق باشید

----------


## coldsummer

عذر می خوام منظورتون استفاده از selection formula  هست ؟

----------


## sm

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

موفق باشید

----------


## miassus10

آقا ببخشید میشه یک مثال بزنید که چجوری میشه یک مقدارو از محیط وی بی به crystal report پاس داد؟

----------


## sm

عیدتون مبارک... تولد امام حسین (ع) مبارک
-----------------------------------------------------------
دو روش هست.
اگه شما با خود فایل گزارش کار میکنین یک کم کدش طولانیه و دردسر داره که نمونش رو توی همین بخش دوستان گذاشتن.
یه روش دیگه هست که شما میتونین یه متغیر از گزارشتون تعریف کنین و از اون به بعد تا نهایتا که باید Data source مربوط به Crystalreport Viewer رو برابر اون گزارش قرار بدین با این متغیر کار کنین. البته این روش رو من بسیار به روش اول ترجیح میدم چونکه بزرگترین حسنش اینه که برنامه شما دیگه مستقل از مسیر فیزیکی فایل گزارشتون میشه!!!! و جزئی از فایل exe برنامه خواهد شد.
بگذریم... برای اینکه در روش دوم پارامتر رد کنین به این طریق عمل کنین :

Public Report As New ReportFile
....
....
....
Report.SetParameterValue("Start", StartDate.ToString.Trim)


موفق باشید

----------


## miassus10

آقا من این خط آخرو قبل از تخصیص ریپورت به بانک نوشتم که اینطوریه:

crpt.SetParameterValue("text5", Now.Date.ToString)

وموقع اجرا این پیغام خطا رو نشون داد:
Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX)

text5 یک تکست باکس تو ریپورتمه

----------


## sm

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

موفق باشید

----------


## miassus10

PrivateSub frmreport_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\mp.mdb;Jet OLEDB:Database Password=miassus"
OleDbConnection1.Open()
ds1.Reset()
da1.SelectCommand.CommandText = "SELECT * FROM stock"
da1.Fill(ds1, "stock")
Dim dt1 As DataTable
dt1 = ds1.Tables("stock")
Dim crpt AsNew inventoryrpt
crpt.SetParameterValue("Text5", "ff")
crpt.SetDataSource(ds1)
Me.CrystalReportViewer1.ReportSource = crpt
CrystalReportViewer1.DisplayGroupTree = False
EndSub


من این کدو مینویسم ولی همچنان همون پیغامو میده!!!

----------


## sm

inventoryrpt نام فایل گزارشتون هست؟
با اندیس امتحان نکردین؟

----------


## miassus10

بله، inventoryrpt اسم فایل کریستاله
نه نمیدونستم چجوری میشه با ایندکس کار کرد

----------


## sm

برای بدست آوردن اندیس کافیه از Break Point استفاده کنین، میتونین تموم اندیسها رو بدست بیارین.
جای خط 1 رو با 2 عوض کنین :

1- crpt.SetParameterValue("Text5", "ff")
2- crpt.SetDataSource(ds1)


موفق باشید

----------


## fereshtehrahimi

این کد دقیقا بهت جواب می دهد ممن ازش استفاده کردم 
  Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim n As SqlConnection = New SqlConnection("Initial Catalog=shoes;data source= localhost;integrated security=sspi;")
        n.Open()
        Dim strsql As String = "select * from tblproduct where dat between '" + TextBox1.Text + "' and '" + TextBox2.Text + "'"

        Dim m As SqlDataAdapter = New SqlDataAdapter(strsql, n)
        Dim d As DataSet = New DataSet()
        m.Fill(d, "tblproduct")

        Dim rep As ReportDocument = New ReportDocument()
        Dim reppat As String = Server.MapPath("CrystalReport2.rpt")
        rep.Load(reppat)
        rep.SetDataSource(d)
        CrystalReportViewer1.ReportSource = rep
        CrystalReportViewer1.ShowFirstPage()
        n.Close()
    End Sub

----------

