PDA

View Full Version : سوال: هنگام زدن دکمه چاپ، چرا داده ها در فرم گزارش نمایش داده نمیشه؟



zayens
دوشنبه 14 تیر 1389, 17:52 عصر
سلام
یه نمونه برنامه ساده گذاشتم که دو تا دکمه داره.
یه دکمه برای نمایش داده ها از دیتابیس درون یه دیتاگرید ویو است (دیتابیس به برنامه Add شده)
که تا اینجا مشکلی نیست.
یه دکمه هم برای چاپ داره که فرم گزارش را فراخوانی میکنه و اطلاعات درون دیتاگریدویو توسط کریستال ریپورت آماده چاپ میشه
طراحی کریستال مشکلی نداره و مشکل اینجاست که داده ها چاپ نمیشن.
یعنی فقط کلمات نام و شماره در فرم گزارش ایجاد میشن و خود داده های نام و شماره نمایش داده نمیشن
فایل برنامه را در زیر گذاشتم که حجمش حدود 780 کیلوبایته

SolveCrystalReport.zip (http://www.4shared.com/file/cXhH-_56/SolveCrystalReport.html) (برای دانلود در صفحه ظاهر شده دکمه آبی رنگ را کلیک کنین)
ممنون میشم اگه برنامه را برام اصلاح کنین

mmd2009
دوشنبه 14 تیر 1389, 23:50 عصر
سلام دوست عزیز

دوست عزیز میشه بگی داده ها رو از چه طریقی میفرستی به گزارش ؟

f_naderi
سه شنبه 15 تیر 1389, 00:04 صبح
سلام من اسکیو ال روی سیستم ندارم پس نمی تونم برنامه ی شمارو اجرا کنم و تغییر بدم ولی تا اونجایی که من کد شما رو بررسی کردم دیدم که شما در فرم گزارش این کد رو قرار ندادید
c.SetDataSource(dt);
dt یک دیتاتیبل است که باید در فرم اول شما با اطلاعات مورد نظر پر شود سپس در زمان ساخت شیئی از نوع فرم گزارش به این فرم ارسال گردد.
این نمونه کار هم نوشته ی یکی از دوستان است فکر کنم به این برنامه نگاهی بیندازیدکمکتان کند

حجتی نیا
سه شنبه 15 تیر 1389, 00:30 صبح
چون ورژن دیتابیس شما با اس کیو ال من متفاوته ،نتونستم برنامه رو اجرا کنم ولی با دیدن کدتون این به نظرم اومد که تو عکس گذاشتم،اونو تست کنین و اگه اطلاعاتی رو نمایش داد، بعداز اون فقط کافیه در کلید چاپ اون دیتاست رو پرش کنین...

zayens
سه شنبه 15 تیر 1389, 12:12 عصر
چون ورژن دیتابیس شما با اس کیو ال من متفاوته ،نتونستم برنامه رو اجرا کنم ولی با دیدن کدتون این به نظرم اومد که تو عکس گذاشتم،اونو تست کنین و اگه اطلاعاتی رو نمایش داد، بعداز اون فقط کافیه در کلید چاپ اون دیتاست رو پرش کنین...
بسیار ممنون
کاری که گفتید طبق عکس انجام دادم
ولی وقتی روی Preview کلیک می کنم ارور زیر را میده:

حجتی نیا
سه شنبه 15 تیر 1389, 15:41 عصر
بسیار ممنون
کاری که گفتید طبق عکس انجام دادم
ولی وقتی روی Preview کلیک می کنم ارور زیر را میده:

در رویداد کلید چاپ ابتدا با دستور
Select_NameTableAdapter.Fill(NUMBER) که بجای NUMBER مقداری که براساس اون میخواین سرچ بکنه رو وارد کن و بعدش کریستال رو باز کن..

zayens
سه شنبه 15 تیر 1389, 23:10 عصر
نوشته شده توسط حجتی نیا http://www.barnamenevis.org/forum/images/buttons/viewpost.gif (http://www.barnamenevis.org/forum/showthread.php?p=1032973#post1032973)
در رویداد کلید چاپ ابتدا با دستور
کد:
Select_NameTableAdapter.Fill(NUMBER)
که بجای NUMBER مقداری که براساس اون میخواین سرچ بکنه رو وارد کن و بعدش کریستال رو باز کن..
همون طور که متوجه شدیم باید پارامتر NUMBER@ که در کریستال هست مقدار بگیره

کد را هر کار میکنم نمیشه وارد کرد.
مثلا برای کد زیر می گه 2 تا آرگومان لازم داره


MYDBDataSetTableAdapters.Select_NAMETableAdapter a =
new SolveCrystalReport.MYDBDataSetTableAdapters.Select _NAMETableAdapter();
a.Fill();
.

یکی number هست که باید تو Fill بذاریم و دومین آرگومانی که میگه لازمه


MYDBDataSet.Select_NAMEDataTable DataTable

هست که نمی دونم باید چی بذارم
اصلا باید از همچین کدی با همچین آرگومانی استفاده بکنیم؟
کدی که خودتون دادید را هم قبول نمی کنه. اصلا توی لیست راهنما نیست.
البته خیلی خوشحالم که مشکلم بالاخره روشن شد
چرا که توی چندین تاپیکی که زدم و در همه ی پست ها کلی جون کندم تا منظورم را بفهمونم
این تاپیک را هم جوری هدایت کردم تا به این قسمت برسیم و اون هم اینه که:
چه طور به پارامتر NUMBER@ که در کریستال هست باید مقدار بدم؟
در واقع پارامتری که در Select_NAME هست(در Select_NAMETableAdapter ) چه طور باید قبل هر چاپ مقداری جدید بگیره؟

حجتی نیا
چهارشنبه 16 تیر 1389, 00:37 صبح
در واقع پارامتری که در Select_NAME هست(در Select_NAMETableAdapter ) چه طور باید قبل هر چاپ مقداری جدید بگیره؟
شما میتونی خودت یه کوئری جدید تو همون tableAdapter تعریف کنی (نحوه تعریفش هم اگه یادتون باشه قبلا در یه تاپیک باهم راجع بهش صحبت کرده بودیم) مثلا تو کوئری اطلاعات رو براساس همون NUMBER انتخاب میکنی،بعدش تو برنامت با دستور
tableAdapter.query-name(NUMBER) دیتاست رو پرش میکنی
برنامه نمونه گذاشتم یه نگاه بکن..
http://www.4shared.com/file/7uip_Be7/FillDataSet.html

zayens
چهارشنبه 16 تیر 1389, 11:56 صبح
شما میتونی خودت یه کوئری جدید تو همون tableAdapter تعریف کنی (نحوه تعریفش هم اگه یادتون باشه قبلا در یه تاپیک باهم راجع بهش صحبت کرده بودیم) مثلا تو کوئری اطلاعات رو براساس همون NUMBER انتخاب میکنی،بعدش تو برنامت با دستور
tableAdapter.query-name(NUMBER) دیتاست رو پرش میکنی
برنامه نمونه گذاشتم یه نگاه بکن..
http://www.4shared.com/file/7uip_Be7/FillDataSet.html

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


InitializeComponent();
CrystalReport1 c = new CrystalReport1();
MYDBDataSetTableAdapters.Select_NAMETableAdapter a
= new SolveCrystalReport.MYDBDataSetTableAdapters.Select _NAMETableAdapter();
a.Fillnumber(this.mydbDataSet.Select_NAME,Form1.nu mber);
c.SetDataSource((DataTable)mydbDataSet.Select_NAME );
crystalReportViewer1.ReportSource = c;


البته در TableAdapter مربوطه new Query با محتوای زیر ساختم


select *from MYTABLE where NUMBER=@NUMBER

حالا دیگه با یاد گرفتن این کار برنامه ی اصلیم را که کلی هم فرم گزارش داشت
دوباره راه اندازی کردم و دوباره به کار انداختمش
(چرا که قبلا گزارشات درست کار میکرد چون قبلا دیتابیسم را Add نکرده بودم)
و الانم که به لطف دوستان مشکلی تو این زمینه ندارم
فقط برام یه مشکل دیگه پیش اومده که توی یه تاپیک جدید مطرح میکنم و اون هم
ذخیره نشدن تغییرات دیتابیسم بعد از بستن برنامه است.
در هر صورت باز هم ممنون

hamdelim
شنبه 30 دی 1391, 12:40 عصر
با سلام و عرض ادب خدمت همه ی برنامه نویسان عزیز
من تشکر ویژه ای داریم از f-naderi بابت این برنامه ای که گذاشتند
یک مسئله ای رو یادآوری کردن که خیلی به در بنده خورد
همچنین از همه ی دوستانی که مطالب مفیدی رو در اختیار بقیه میزارن تشکر میکنم