ورود

View Full Version : سوال: وصل شدن به دو جدول در گزارش



mc_laren
یک شنبه 28 تیر 1388, 22:33 عصر
به نام خدا با سلام
من قصد داشتم تا در یکی از گزارش هایم از دوتا جدول های بانک اطلاعاتی ام استفاده کنم حالا به این مشکل بر خورده ام که چگونه وقتی می خواهم دیتاست رو به گزارش وصل کنم بهش حالی کنم مربوط به کدوم جدول می باشد.
من برای اتصال دیتا ست به گزارش از این دستور استفاده می کنم:


rptDocument.SetDataSource(DataSet)

shafi21
شنبه 03 مرداد 1388, 15:35 عصر
منم این مشکلو دارم
یه دیتاسورس با ویزارد به برنامم اضافه کردم ودر صفحه report.rpt دوتا جدولمو expert کردم وقتی دیتاست رو با یک جدول پرمیکنم مشکلی وجود نداره ولی با دوتا کارنمیکنه


Public Class report
Private str As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\db.stud.mdb"
Dim con As New OleDbConnection(str)
Private com As OleDbCommand
Private da As OleDbDataAdapter
Dim dts As New DataSet
Private Sub report_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
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 rpttb As New CrystalDecisions.CrystalReports.Engine.ReportDocum ent
rpttb.Load(strReportPath)
Dim st As String = "select * from tb"
Dim ds As new DataSet ()
Dim da As New OleDbDataAdapter(st, con)
con.Open()
da.Fill(ds, "tb")
rpttb.SetDataSource(ds)
CrystalReportViewer1.ReportSource = rpttb
con.Close()
End Sub

ضمنا میخوام بدونم چرا بدون داشتن دیتاسورس با ویزارد-دیتابیسم expert نمیشه

mahdi87_gh
شنبه 03 مرداد 1388, 16:34 عصر
سلام دوستان عزیز
شما وقتی که از تابع SetDatasource استفاده می کنید، میتوانید از Datasource ای که می خواهید استفاده نمایید. مثل یک جدول، ویو، دیتاست...
اگه شما داخل ریپورت از یک جدول استفاده می کنید،از کدی مثل زیر استفاده کنید:

RepDoc.SetDataSource(objDataset.Tables["students"]);


وقتی دیتابیس رو با یک جدول پرمیکنم مشکلی وجود نداره ولی با دوتا کارنمیکنه
دلیلش اینه که شما وقتی یک جدول داخل Dataset دارید به طور پیش فرض همون جدول به ریپورت فرستاده میشه. ولی اگه چندتا جدول توی ریپورت استفاده می کنید، شما باید از قبل همه ی اون جدول ها رو داخل DataSet لود کرده باشید و رابطه های میان جدول ها رو ایجاد کرده باشید. بعد همون dataSet رو به عنوان آرگومان تابع SetDatasource استفاده کنید. مثل زیر:

maliDataset.Relations.Clear();
DataRelation dr = new DataRelation("Shahrieh.Cardno --> Varzeshkaran.Cardno", maliDataset.Tables["Shahrieh"].Columns[0], maliDataset.Tables["Varzeshkaran"].Columns[0], false);
maliDataset.Relations.Add(dr);

البته فکر می کنم چندان لزومی نداشته باشه که رابطه ها درون DataSet ایجاد بشن،چون با خاصیت RecordSelectionFormula میتونید مشخص کنید که رابطه ها چطور هستند.( اگه اینکارو نکید، به ازای هر رکورد از جدول اولتون،همه ی رکوردهای جدول دومتون در گزارش آورده میشه. یعنی دوتل جدول در هم ضرب دکارتی میشن)
موفق باشید:قلب::بوس:

shafi21
شنبه 03 مرداد 1388, 21:32 عصر
ممنون ولی مشکل حل نشد!رشته sرو برای دو جدول به این صورت مینویسمDim s As String = "select * from letter,subject "و هنگام پرشدن اداپتر هم اسم دو جدول رو مینویسم ولی گزارش رو خالی نشون میده

mahdi87_gh
یک شنبه 04 مرداد 1388, 11:57 صبح
دوست عزیزم
شما به تعداد جداولی که در کریستال ریپورت قرار داده اید باید جداول متناظر در Dataset داشته باشید.به صورت زیر:

str1=select * from tbl1;
fill in dataset;
str2=select * from tbl2;
fill in dataset;