PDA

View Full Version : مشکل با فیلد های زیاد در گزارش گیری با کریستال



sirvan-me
جمعه 27 مرداد 1391, 20:24 عصر
سلام به همه ی دوستان ... من تازه کار با کریستال رو برای گزارش گیری شروع کردم ... من تو برنامم ( دیتابیس برنامم ) 3 جدول دارم که می خوام با استفاده از کلید اصلی و خارجی و ارتباط بین جداول فیلد های این جداول رو تو گزارش درج کنم ... موقع گزارش گیری با خطا مواجه نمیشم اما ... چون تعداد فیلدها زیاد هستش در هم بر هم میشه !!!!! میشه یه راهکاری برای حل این مشکل ارائهبدین ... ممنونم

m.khani_121
جمعه 27 مرداد 1391, 22:15 عصر
دوست عزیز منم همین مشکل رو داشتم . راهی که برای خودم جواب داد این بود که بین جدول هام inner join زدم و ریختمش تو dataset و dataset رو توی کریستال به عنوان دیتابیس دادم .

sirvan-me
جمعه 27 مرداد 1391, 22:30 عصر
من به این صورت عمل کردم که از طریق ویزارد Crystal Report دو جدول که با کلید خارجی به هم مربوط بودن رو به هم لینک کردم و بعد از آرایش فرم گزارش در فرم مربوط به گزارش در رویداد کلیک مربوط به دکمه ی Print این طور نوشتم :

جداول من : S و SP

var Rd = new ReportDocument() { FileName = "CrystalReport1.rpt" };
var Con = new SqlConnection("server=.;database=Ghataat;integrated security=true");
//S.Sname,S.S#,S.Status,S.City,SP.P#,SP.Qty From SP INNER JOIN S ON SP.S#=S.S#
var Da = new SqlDataAdapter("SELECT SP.S#,SP.P#,SP.Qty,S.Sname,S.Status,S.City From SP INNER JOIN S ON S.S#=SP.S#", Con);
Con.Open();
DataSet Ds = new DataSet();
Da.Fill(Ds,"SP");
Rd.SetDataSource(Ds);
crystalReportViewer1.ReportSource = Rd;
crystalReportViewer1.Show();
Con.Close();
/*
ReportDocument rd = new ReportDocument();
rd.Load("CrystalReport1.rpt");
crystalReportViewer1.ReportSource = rd;
crystalReportViewer1.Refresh();
* */

اما در خروجی گزارش من هیچ اطلاعاتی مشاهده نمیشه .. ایم بگم که اگر در گزارش از یک جدول استفاده کنم همه چی درسته ... این سوال اول


اما سوال دوم !!!!!!!!!!!!!!

تعداد فیلد های من زیاده برای این مشکل چه راهکاری دارید ؟

m.khani_121
شنبه 28 مرداد 1391, 00:04 صبح
عزیز میتونی برنامه رو بزاری ؟

sirvan-me
شنبه 28 مرداد 1391, 08:55 صبح
الان شرکت هستم ... برنامه ی بزرگی نیست ... فقط بخش گزارش گیری داره ... همین !!!!!!!!1 تا شب میذارم ... امیدوارم کمک کنید .....

veniz2008
شنبه 28 مرداد 1391, 09:41 صبح
سلام. بعید میدونم با دستور sql توی محیط دات نت به جواب برسی. چند وقت پیش دقیقا میخواستم از چند جدول توی کریستال خروجی بگیرم.هرکاریش کردم هیچی نمایش نمیداد. راهکار شما اینه: یه stored procedure بساز و دستور join رو اونجا بنویس. بعدش یه دیتاست به پروژه ات اضافه کن و sp رو بهش معرفی کن. از اینجا به بعدش دقیقا میشه مثل همون مراحل همیشگی که انجام دادی. نکته اش فقط استفاده از یک sp و ریختن sp درون دیتاست هست.
موفق باشی.

sirvan-me
شنبه 28 مرداد 1391, 18:37 عصر
سلام. بعید میدونم با دستور sql توی محیط دات نت به جواب برسی. چند وقت پیش دقیقا میخواستم از چند جدول توی کریستال خروجی بگیرم.هرکاریش کردم هیچی نمایش نمیداد. راهکار شما اینه: یه stored procedure بساز و دستور join رو اونجا بنویس. بعدش یه دیتاست به پروژه ات اضافه کن و sp رو بهش معرفی کن. از اینجا به بعدش دقیقا میشه مثل همون مراحل همیشگی که انجام دادی. نکته اش فقط استفاده از یک sp و ریختن sp درون دیتاست هست.
موفق باشی.

مرسی بابت راهنماییت اما .... من یه Sp ساختم (در محیط SQL اجراش هم کردم جواب صحیح می ده ) و به این صورت استفاده کردم ... اما تغییری نکرد ... هیچ اطلاعاتی برگردونده نمیشه !!!!!!

نام Sp هم JoinMyTable هستش ...

var Rd = new ReportDocument() { FileName = "CrystalReport1.rpt" };
var Con = new SqlConnection("server=.;database=Ghataat;integrated security=true");
var Cmd = new SqlCommand() { Connection = Con, CommandText = "JoinMyTable", CommandType = CommandType.StoredProcedure };
var Da = new SqlDataAdapter(Cmd);
Con.Open();
DataSet Ds = new DataSet();
Da.Fill(Ds,"SP");
Rd.SetDataSource(Ds);
crystalReportViewer1.ReportSource = Rd;
crystalReportViewer1.Show();
Con.Close();

veniz2008
شنبه 28 مرداد 1391, 19:04 عصر
شما در واقع کریستال ریپورت رو فراموش کردی که به ریپورت داکیومنت معرفی کنی. برای راحتی خودتون فایل کریستال ریپورت رو به درون پوشه دیباگ drag کنید. حالا با فرض اینکه نام کریستال ریپورت شما crt باشه. کد زیر رو بعد از پر کردن دیتاآداپتور قرار بدید:

Rd.Load("crt.rpt");

sirvan-me
شنبه 28 مرداد 1391, 19:23 عصر
ممنون از توجهت دوست من ... اما !!!! تغییری نکرد ... در ضمن من که معرفی کردم !!!!
خط اول :

var Rd = new ReportDocument() { FileName = "CrystalReport1.rpt" };


شما لطف می کنی نمونه برنامه ساده قرار بدی ؟!!!

veniz2008
شنبه 28 مرداد 1391, 19:30 عصر
ببخشید من ندیدم. الان دیدمش. یه کاری انجام بده. این احتمال وجود داره که دیتاست شما مقدار نمیگیره. بعد از پر کردن دیتاآداپتور اونو داخل یه گرید بریز اگه گرید چیزی رو نمایش نمیده پس دیتاست بدرستی مقداردهی نشده. اونوقت یا دیتاست رو اصلاح میکنیم یا از دیتاتیبل استفاده میکنیم.

sirvan-me
شنبه 28 مرداد 1391, 20:11 عصر
این کار رو انجام دادم و دیتاست رو که به GridView نسبت دادم جواب کاملا صحیحی گرفتم !!!!!!!

veniz2008
شنبه 28 مرداد 1391, 20:19 عصر
دوست من، کدها تا جایی که من نگاه کردم مشکلی نداره. از دیتاتیبل هم واسه تست استفاده کن. اگه دیدی جواب نمیده سعی میکنم تا آخر شب یه نمونه گزارش ترکیبی برات بسازم و قرار بدم. منتظر تست دیتاتیبل و جواب شما هستم.

sirvan-me
شنبه 28 مرداد 1391, 20:31 عصر
ممنون خیر جواب نداد ......

sirvan-me
شنبه 28 مرداد 1391, 21:03 عصر
دوست من اگه لطف کنی مبتدی کار کنی یه دنیا ممنون ........................

veniz2008
شنبه 28 مرداد 1391, 23:01 عصر
سلام مجدد. برنامه رو براتون آماده کردم. سعی کردم ساده باشه و از پیچیدگی به دور باشه. من معمولا با ویژوال 2010 و sql 2008 کار میکنم ولی واسه اینکه مشکلی در اجرا براتون پیش نیاد این پروژه رو با vs 2005 و sql server 2005 ساختم. هر دو فایل رو دانلود و در کنار هم قرار بدید و بعد اکسترکت کنید. درون پوشه برنامه یه پوشه با نام DataBase هست که فایل های دیتابیس برنامه به همراه stored procrdure مربوطه قرار داره. دیتابیس رو درون sql اتچ کنید. بانک ازسه جدول ساده تشکیل شده: 1. جدول Users : مشخصات کاربران رو میگیره که IDUser کلید جدول هست و جستجوی برنامه هم براساس همین کد مشتری قرار دادم. 2. جدول Car : این جدول کد مشتری و کد ماشین( IDCar) رو میگیره . کد مشتری کلید خارجی هست و کد ماشین کلید اصلی جدول. 3. جدول مشخصات (اتومبیل) : این جدول شامل IDCar هست که هم کلید اصلی جدول و هم کلید خارجی هستش. ارتباط بین 3 جدول رو برقرار کردم که میتونی در دیاگرام ببینیشون (هرچند که برای join کردن اجباری به ارتباط برقرار کردن نیست و کافیه جداول بصورت منطقی بینشون ارتباط باشه که بین 3 جدول بالا این ارتباط وجود داره). نکته دیگه ای رو به نظرم نیاز نیست توضیح بدم. کدها کاملا واضح هستن اما اگر هرجایی رو سوال داشتید بپرسید توضیح میدم.
91475
91476

sirvan-me
شنبه 28 مرداد 1391, 23:17 عصر
ممنون ... حتما اگه سوالی بود مزاحم میشم ... راستی عیـــــــــــــــــــــــ ــــدتو هم مبارکــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــ

sirvan-me
شنبه 28 مرداد 1391, 23:29 عصر
تست کردم جواب داد ... بازم مرسی یه دنیا ممنون .................................................

sirvan-me
دوشنبه 30 مرداد 1391, 12:24 عصر
باز هم سلام به همه ی دوستان .... من انقدر درگیر سوال دوم و جواب بسیار عالی دوستمون شدم که سوال اولم رو به کل فراموش کردم !!!!!!!!!!!!!!!!!!!!!!!
زمانی که تعداد فیلد های قابل نمایش برای گزارش گیری زیاد میشه ، چاره چیه .... چون تو حالت معمولی اطلاعات درهم برهم میشه !!!!!!

sirvan-me
چهارشنبه 01 شهریور 1391, 09:42 صبح
یعنی واقعا کسی تا حالا به این مشکل بر نخورده ؟!!!! دوستان لطفا راهنمایی بفرمائید !!!!

sirvan-me
پنج شنبه 02 شهریور 1391, 20:51 عصر
کسی نبود کمک کنه ؟!!!!!!!