PDA

View Full Version : سوال: خالی بودن گزارش ترکیبی از چند جدول



veniz2008
جمعه 16 تیر 1391, 12:01 عصر
سلام دوستان،میخوام که از 3 تا جدول دیتابیسم که با هم ارتباطشون رو برقرار کردم با دستور inner join گزارش بگیرم.من کد مورد نظر رو داخل sql تست کردم و جواب میده،مشکل من با نمایش داده ها درون کریستال هستش(البته با یک جدول قبلا انجام دادم ولی گزارش ترکیبی از چند جدول به مشکل برخوردم)، من تمام کارها رو انجام دادم و جدول ها و فیلدهای مورد نظرم رو به کریستال اضافه کردم،حالا تو محیط ویژوال یک crystalreportviewer گذاشتم و میخوام براساس شناسه کاربری رکوردها رو درون کریستال نمایش بدم ولی هیچ رکوردی رو نمایش نمیده(برنامه هیچ خطایی نداره ولی صفحه گزارش خالی هست)،من از دیتاتیبل استفاده کردم و نتیجه کوئری رو به کریستال ارتباط میدم، همچنین برای اینکه مطمئن بشم دیتاتیبل بصورت صحیح پر شده یک گریدویو گذاشتم و نتیجه دیتاتیبل رو بهش وصل کردم، گرید بدون هیچ مشکلی داده ها رو نمایش میده ولی گزارشم با کریستال خالی از رکورد هست. من کدهایی رو که استفاده کردم میزارم دوستان محبت کنند بگن مشکل کار از کجاست؟(لطفا با زبان #C کدهای لازم رو بگید)

SqlConnection con = new SqlConnection("Data Source=(local);Initial Catalog=KHODRO;Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter("select Users.IDuser,Users.FirstName,Users.LastName,Car.ID Car,Feature.Color,Feature.Model from Users inner join Car on Users.IDUser = Car.IDUser inner join Feature on Car.IDCar = Feature.IDCar where Users.IDUser = '" + textBox1.Text.Trim() +"'", con);
con.Open();
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
ReportDocument rd = new ReportDocument();
rd.Load("rptjoin.rpt");
rd.SetDataSource(dt);
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Show();
crystalReportViewer1.RefreshReport();
con.Close();
اگر بین بعضی از فیلدها فاصله افتاده بخاطر ادیتور سایت هست وگرنه توی ویژوال فیلدها رو درست تایپ کردم.
دوستان یک عکس از برنامه هم میزارم تا کاملا منظورم رو رسونده باشم:
89285

fakhravari
جمعه 16 تیر 1391, 13:45 عصر
یک رکورد برگردادنده در کریستال اما فکر کنم فیلد ها را هم نام نزاشتید :متفکر:

veniz2008
جمعه 16 تیر 1391, 16:40 عصر
یک رکورد برگردادنده در کریستال اما فکر کنم فیلد ها را هم نام نزاشتید :متفکر:
چک کردم ولی همه فیلدها به درستی نامگذاری شدن، اینم یه عکس:
89293

ali_md110
جمعه 16 تیر 1391, 18:19 عصر
با سلام
ابتدا کوئریتون رو که از چند جدول تشکیل شده درون یک StoredProcedure داخل اسکیول سرور تعریف کنید
سپس یک فایل دیتاست از طریق Project>>new item>> به برنامه اضافه کنید
استورد پروسیجرتون رو دراگ کنید بکشید وسط دیتاست زهاش کنید
(حتی در این قسمت میتونید بجای استورد پروسیجر یک دیتاتیبل به دیتاست اضافه کنید و فیلدهاتون رو همنام با فیلدهای سه جدولی که نیاز دارید بصورت دستی به دیتا تیبل اضافه کنید)
برنامه رو ذخیره گنید
حالا در کریستال ریپورت به این دیتاست وصل بشوید
از طریق DataBaseExpert>>گزینه project dataو سپس گزینه ADO.NET Dataset
سپس فیلدهاتون رو بکشید روی کریستال و دیگه بقیش طبق میل خودتون
سپس توی کد برنامتون همون استورد پروسیجری رو که اول در بالا نوشتید یا (هر استورد پروسیجر دیگه که دوست دارید فقط دقت کنید که فیلدها با فیلدهای دیتاستی که ابتدا ساختید همنام باشند) رو درون یک دیتاتیبل یا دیتاست دیگه بریزید و وصلش گنید به خاصیت SetDataSourceکریستال

samad1987
شنبه 11 خرداد 1392, 22:14 عصر
پیشنهاد من استفاده از view هستش.. اینجوری کلا join و از این چیزا نمیخواد و دیگه به مشکلی برنمیخوری