PDA

View Full Version : پرینت اطلاعات موجود در datagridview



smt_414
دوشنبه 02 مهر 1386, 16:08 عصر
سلام من برای پرینت اطلاعات موجود در datagridview ازاین آدرس استفاده کردم

http://www.codeproject.com/csharp/datagridviewprinter.asp

به این صورت که کلاس های موجود د برنامه فوق رو به پروژه اضافه کردو و هر آنچه احتیاج بود ساختم و یا کد نویسی کردم
و دیتابیس از نوع sql است و برای اون هم کد نویسی کردم
همه چیز بر وفق مراد بود تا زمانی که باتم پرینت پریویو رو می زنم با صفحه خالی مواجه می شم با وجود اینکه دیتاگریدویو حاوی دیتا می باشد
سوالم اینه , چرا با وجود اینکه تمام موارد رو به برنامم اضافه کردم این مشکل به وجود می آد؟؟

smt_414
سه شنبه 03 مهر 1386, 12:11 عصر
سلام
به اساتید عزیز
می دونید کجای کار می لنگه:متفکر:
که به این مشکل برخورد کردم؟؟

PC2st
سه شنبه 03 مهر 1386, 13:03 عصر
من امتحان کردم، رکوردها در Print Preview هم نمایش داده شدند.
همه کارهایی که گفته بود رو انجام دادین؟ از کنترل PrintPreviewControl استفاده کردی؟

smt_414
سه شنبه 03 مهر 1386, 18:20 عصر
سلام
از توجهتون ممنونم
اگه درست متوجه شده باشم
اضافه کردن PrintPreviewControl به برنامه است , اما من این رو داخل اون مثال ندیدم
فقط PrintDocument بود که به برنامه اضافه کردم
میشه بیشتر راهنمایی کنید.

PC2st
سه شنبه 03 مهر 1386, 21:09 عصر
PrintPreviewControl یک کنترل مثل سایر کنترلهای دات نت از جمله TextBox و ComboBox و غیره، است.
بطور خیلی خلاصه، این کنترل رو میتونید از toolbox به فرمتون اضافه کنید و کد زیر رو براش بنویسید:


printPreviewControl1.Document = printDocument1;

که printDocument1 یک شیئ از نوع PrintDocument هست، بعبارتی متغیر printDocument1 همان متغیری است که برای کلاس مذکور آنرا به متد پاس کرده اید، یعنی:


DataGridViewPrinter printer = new DataGridViewPrinter(dataGridView1, printDocument1, true, true, "A", this.Font, this.ForeColor, true);

که کلاس DataGridViewPrinter همان کلاسی است که میخواید برای پرینت کردن ازش استفاده کنید...
در ضمن باید رویداد مربوط به شیئ printDocument1 را نیز این چنین handle کنید:


printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);



void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
e.HasMorePages = printer.DrawDataGridView(e.Graphics);
}

بطور خلاصه این گونه باید پرینت بشه، سایر خواص رو هم اگر خواستید تنظیم کنید.

smt_414
سه شنبه 03 مهر 1386, 21:32 عصر
سلام باز هم تشکر
و از توضیحات کاملتون ممنون
متعجبم از اینکه دقیقا همون کد رو نوشتم ولی جواب چیز دیگست
یه زحمت دیکه
برنامه رو ضمیمه کردم
حدس می زنم اینطور راحتتر بشه مشکل رو بررسی کرد

ایام به کام.

PC2st
چهارشنبه 04 مهر 1386, 00:49 صبح
ببخشید ولی کدها چقدر ناخوانا بود! :متفکر:
یک قسمت از مراحلی که گفته بودم رو انجام ندادید، یعنی کد زیر رو ننوشتید:


MyPrintDocument.PrintPage += new PrintPageEventHandler(MyPrintDocument_PrintPage);

کد فوق رو در داخل متد سازنده Form1 بنویس، یعنی:


public Form1()
{
InitializeComponent();

MyPrintDocument.PrintPage += new PrintPageEventHandler(MyPrintDocument_PrintPage);
}

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

maxpayn2
پنج شنبه 13 دی 1386, 11:53 صبح
سلام
من از این کلاس استفاده کردم و درست هم کار میکنه ولی وقتی پرینت میگیره برای ستون های گرید فضایی تقریبا 2 برابر اندازه رشته ای که تو اون هست رو در نظر میگیره که باعث میشه حتی در صورت landscape بودن هم از صفحه بزنه بیرون و بنابر این ستون هایی رو که جا نمیشه تو صفحه بعدی میاره ، برای حل این مشکل باید چی کار کنم ؟

behzadk
پنج شنبه 13 دی 1386, 16:47 عصر
قبلا بحث شده
http://barnamenevis.org/forum/showthread.php?t=87896

mr_mtc
جمعه 14 دی 1386, 14:44 عصر
من از این کد استفاده کردم و درست هم کار کرد ولی یک مشکل داره!
من نمی تونم صفحه چاپ رو "راست به چپ" کنم، در حالیکه گریدویوی من راست به چپه