با تشکر . عذر می خام خیلی سرتونو درد آوردم
من قبلا یه datatable معادل با همون فیلد هایی که تو query داشتم به صورت ویزارد درست می کردم و اونو expert کرده و الی اخر ... نکته مهم این که اسم سرور پویا معرفی می شد و همهچیز درست بود . کدزیر:
Dim ds As New DataSet
query = "select lastname from ostad where codeostad='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std")
Dim mytbl As DataTable
mytbl = New DataTable
da.Fill(mytbl)
Dim strReportPath As String = GetCurrentDirectory()
If strReportPath.Substring(strReportPath.Length - 9) = "bin\Debug" Then
strReportPath = strReportPath.Substring(0, strReportPath.Length - 10)
End If
strReportPath &= "\CrystalReport1.rpt"
Dim rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocum ent
rpt.Load(strReportPath)
rpt.SetDataSource(mytbl)
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.ShowDialog()
اما با خودم فکر کردم کاش اون دیتاتیبل رو که اول کار به صورت ویزارد درست می کردم رو از قضیه حذف کنم برای همین به فکر command افتادم ( مشکل ارسال پارامتر با کمک دوستان حل شد ). من این کدها رو به شکل زیر استفاده کردم
Dim re As Form1 = New Form1
re.CrystalReportViewer1.ReportSource = re.crystalReport81
re.crystalReport81.SetParameterValue("a", TextBox1.Text)
Dim ds As New DataSet
query = "select * from ostad where codeostad='" + TextBox1.Text.Trim + "'"
da = New SqlClient.SqlDataAdapter(query, cn)
da.Fill(ds, "std")
Dim rpt As New CrystalReport8
rpt.SetDataSource(ds.Tables("std"))
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.Show()
برنامه جواب می ده اما یه مشکل اساسی داره و اون اینکه برای استفاده از command باید سرور رو معرفی کنم و نمی شه پویا باشه . آیا شما راه حلی برای این قضیه داری ؟؟
نکته بعدی راجع به ویزارد و پر کردن دیتاست : من شنیدم بهتره از ویزارد استفاده نشه .
دیتاست رو اگه پر نکنم چی کار کنم ؟ لطفا توضیح بدین .اگه منظورتون اینه که استفاده از command دیگه دیتاست نمی خاد من به شکل زیرم کد نوشتم ولی اخه صفحه گزارش که لود میشه یه فرم باز می کنه که مقدار متغیر رو درخواست می کنه و مقدار ارسالی تو کدنویسی رو نادیده می گیره
Dim re As Form1 = New Form1
re.CrystalReportViewer1.ReportSource = re.crystalReport81
re.crystalReport81.SetParameterValue("a", TextBox1.Text)
Dim rpt As New CrystalReport8
Form1.CrystalReportViewer1.ReportSource = rpt
Form1.Show()