PDA

View Full Version : سوال: print گرفتن از data grid viewبه صورت رنگی و سیاه سفید



#Faranak
دوشنبه 23 فروردین 1389, 00:50 صبح
با سلام
من data gridام رو باتوجه به داده هام رنگ کردم برای print گرفتن ازآن یک print documentروی فرم گذاشتم وکد زیر رو برای دکمه چاپ نوشتم:

Bitmap bmp = new Bitmap("..\\..\\Grid.bmp");
dataGridView1.DrawToBitmap(bmp, new Rectangle(0, 0, dataGridView1.Width, dataGridView1.Height));
bmp.Save("..\\..\\Grid1.bmp");
printDocument1.Print();


و بعد رویدادprintpageآن را به صورت زیر handleکردم:



Image img = Image.FromFile("..\\..\\Grid1.bmp");
e.Graphics.DrawImage(img, new Point(0, 0));
img.Dispose();
img = null;

اما موقع اجرا به من باگ با مضمون Argument Exception Was UnHandled.parameter is not validمیده واین باگ رو روی خط اول از کد اولی که گذاشتم میده.درضمن در همین خط کدیعنی
Bitmap bmp = new Bitmap("..\\..\\Grid.bmp"); من دقیقا نمی دونم چرا به عنوان constructorمسیر..\\..\\Grid.bmp رامیدهیم
اما چون قبلا این کد به این صورت کارکرده بود به این صورت نوشتم
بچه هااگه کسی جواب سوالامو میدونه.لطفاراهنمایی کنه.



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

ممنون.

saeedalg
دوشنبه 23 فروردین 1389, 14:09 عصر
دو راه داري:
1. از كامپوننتهاي جانوس استفاده كني (يا يه چيزي مشابه) كه پرينت ساده و راحتي هم دارند براي Grid
2.


int margin = 50;
int pageheight = 1169;
Size size = new Size(827 - (2 * margin), pageheight - (2 * margin));
Rectangle rectHeader = new Rectangle(margin, margin, size.Width, size.Height / 9);
Rectangle rect = new Rectangle(rectHeader.Left, rectHeader.Bottom, size.Width, size.Height - rectHeader.Height);
e.Graphics.DrawRectangle(Pens.Black, rect);
PaintEventArgs myPaintArgs = new PaintEventArgs(e.Graphics, rect);
this.InvokePaint(gridEX1, myPaintArgs);
this.InvokePaint(gridEX1, rect, e);
اين كد كه گذاشتم رو مشابهش رو تو رخداد PrintPage‌پياده كن، بايد با مارجين بازي كني تا درست پرينت بگيره

saeedalg
دوشنبه 23 فروردین 1389, 14:14 عصر
اين خط: this.InvokePaint(gridEX1, rect, e); اضافيه (البته از اينم ميتوني استفاده كني)

#Faranak
دوشنبه 23 فروردین 1389, 23:09 عصر
دو راه داري:
1. از كامپوننتهاي جانوس استفاده كني (يا يه چيزي مشابه) كه پرينت ساده و راحتي هم دارند براي Grid
2.


int margin = 50;
int pageheight = 1169;
Size size = new Size(827 - (2 * margin), pageheight - (2 * margin));
Rectangle rectHeader = new Rectangle(margin, margin, size.Width, size.Height / 9);
Rectangle rect = new Rectangle(rectHeader.Left, rectHeader.Bottom, size.Width, size.Height - rectHeader.Height);
e.Graphics.DrawRectangle(Pens.Black, rect);
PaintEventArgs myPaintArgs = new PaintEventArgs(e.Graphics, rect);
this.InvokePaint(gridEX1, myPaintArgs);
this.InvokePaint(gridEX1, rect, e);
اين كد كه گذاشتم رو مشابهش رو تو رخداد PrintPage‌پياده كن، بايد با مارجين بازي كني تا درست پرينت بگيره

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

#Faranak
سه شنبه 24 فروردین 1389, 11:12 صبح
بچه ها اگه کسی میدونه چرا وقتی کد این دوستمون رو نوشتم قسمت مربوط به رکوردهاروکامل سفیدپرینت گرفت وهیچ داده ای را درگرید پرینت نگرفت راهنمایی کنه.کلا اگه
کسی بلده باروش های دیگه هم ازگریدبه صورت سیاه و سفید پرینت بگیره لطفاراهنمایی کنه.

#Faranak
سه شنبه 24 فروردین 1389, 14:57 عصر
هیچ کس بلد نیست پرینت سیاه وسفید بگیره:متفکر:

#Faranak
جمعه 27 فروردین 1389, 13:13 عصر
جواب سوال اول رو خودم پیدا کردم :باید به عنوان constructorبه bitmapیک فایل bmpخالی بدیم.

در مورد سوال دوم هم یعنی پرینت سیاه و سفیدهم می دونم که باید کدزیردررویدادکلیک باتن نوشته شود:
printdocument p=new printdocument()

p.printpage +=new printpageEventHandler(p_printpage );
p.print;



فقط نمی دونم درتابع p_printpage موقع هندل کردن e.graphicsازچه متدی استفاده کنم که از گریدم سیاه وسفید پرینت بگیره.؟که فکر نمی کنم بیشترازیک خط کدباشه
بااین اوصاف بازم کسی نمی تونه راهنمایی کنه؟