آموزش پرینت گرفتن از DataGridView با استفاده از کلاس

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

فایل RAR بالا را از حالت فشرده خارج کنید :
print-of-datagridview-in-c#-07
همانطور که در شکل بالا مشاهده می کنید در داخل پوشه یک فایل با پسوند cs. و چند نوع فونت وجود دارد. وجود این فونت ها باعث می شود که اگر در کامپیوتر مقصد این فونت وجود نداشته باشند باز هم مشکلی در نمایش به وجود نیاید. سپس یک برنامه ایجاد کرده و یک کنترل دکمه و یک دکمه بر روی فرم قرار دهید. سپس کلاسی را که دانلود کرده اید را به روش زیر به برنامه اضافه کنید :

print-of-datagridview-in-c#-03
با کلیک بر روی Existing Item پنجره ای به صورت زیر باز می شود که از شما مسیر کلاس را می خواهد :
print-of-datagridview-in-c#-04

با انتخاب کلاس و زدن دکمه OK، کلاس به پنجره Solution Explorer اضافه می شود :
print-of-datagridview-in-c#-05
برای استفاده از این کلاس باید فضای نام زیر را در قسمت تعریف فضاهای نامی فراخوانی کنید :

using DataGridViewPrinter;

حال بر روی فرم دو بار کلیک کرده و کدهای زیر را بنویسید :

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "نام");
    dataGridView1.Columns.Add("Column2", "نام خانوادگی");
    dataGridView1.Columns.Add("Column3", "سن");

    dataGridView1.Rows.Add("یحیی", "ابراهیمی", 40);
    dataGridView1.Rows.Add("یونس", "ابراهیمی", 35);
    dataGridView1.Rows.Add("سروش", "ابراهیمی", 22);

    dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("B Mitra", 12);
    dataGridView1.DefaultCellStyle.Font              = new Font("B Mitra", 12);
}

سپس بر روی دکمه دو بار کلیک کرده و کدهای زیر را در رویداد click آن بنویسید :

private void button1_Click(object sender, EventArgs e)
{
    this.Cursor = Cursors.WaitCursor;

    DGVPrinter printer            = new DGVPrinter();
    printer.CellAlignment         = StringAlignment.Center;
    printer.CellFormatFlags       = StringFormatFlags.DirectionRightToLeft;

    printer.PageNumbers           = true;
    printer.PageNumberAlignment = StringAlignment.Center;

    printer.HeaderCellAlignment   = StringAlignment.Center;
    printer.HeaderCellFormatFlags = StringFormatFlags.DirectionRightToLeft;
            
    printer.PorportionalColumns   = true;

    printer.Title                 = "مشخصات فردی";
    printer.TitleAlignment        = StringAlignment.Center;
    printer.TitleColor            = Color.Red;     
    printer.TitleFont             = new Font("B Zar", 24);
    printer.TitleFormatFlags      = StringFormatFlags.DirectionRightToLeft;

    printer.PrintPreviewDataGridView(dataGridView1);
    this.Cursor = Cursors.Default;
}

حال برنامه را اجرا کرده و بر روی دکمه کلیک و نتیجه را مشاهده کنید :
print-of-datagridview-in-c#-06

لطفا اگر نظر، پیشنهاد و یا انتقادی در باره مطلب بالا دارید در قسمت زیر و اگر سوالی دارید در بخش پرسش و پاسخ مطرح بفرمایید.

  1. رابرت پاسخ دادن

    شدیدا ازت متشکرم

  2. h.gheidrlou پاسخ دادن

    سلام مهندس جان
    تشکر از زحمات بسیار زیاد شما و اینکه خدا به شما اجر معنوی دهد
    یه مشکل؟
    من میخوام اطلاعاتی که میخوام چاپ بگیرم در جدول کامل نمایش داده بشه مثلا اگر تعداد ستون های دیتا گرید ۱۲ تا باشه همش را توی هم میزنه
    و اطلاعات ناقص میشه
    درثانی میخوام اگه اطلاعات زیاد بود بطور اتومات کدی بنویسم که کاغذ A4بصورت عرض چاپ بشه کد تنظیمات چاپگر را اگه ب ه این کدها اضافه میکردید خیلی خوب بود
    بازهم تشکر

  3. رحیم دهقانی پاسخ دادن

    اصلاحیه
    با سلام
    فایل DGVprinter را باز کن و دو تابع زیر را داخل فایل پیدا کن:
    ۱٫PrintPreviewDataGridView
    ۲٫PrintDataGridView
    حالا درون هردو تابع زیر خط کد

    this.dgv = dgv; 

    کدهای زیر را وارد کنید:

    var colCount = dgv.ColumnCount;
    printDoc.DefaultPageSettings.Landscape = false;
    if (colCount > 6)
    { 
         printDoc.DefaultPageSettings.Landscape = true; 
    }
    else 
    { 
        printDoc.DefaultPageSettings.Landscape = false; 
    }

    این کد میاد تعداد ستون های دیتاگریدتو بدست میاره بعد اگر تعداد ستون ها بیشتر از ۶ باشه برگه رو بصورت عمودی پرینت میکنه و اگر کمتر از ۶ ستون داشته باشی برگه رو بصورت افقی (لنداسکیپ)پرینت میکنه
    موفق باشید

  4. مصطفی پاسخ دادن

    یک دنیا ممنون مهندس منو از کلی مشکل نجات دادی

    • یونس ابراهیمی پاسخ دادن

      خواهش می کنم ، شما لطف دارین

  5. غلامرضا پاسخ دادن

    سلام ممنون از اینکه تجربیات و علوم خود را در اختیار دیگران قرار می دهید.
    سلولهایی که متن طولانی (به اندازه یک پارا گراف) دارند ،‌فقط در یک خط قرار می گیرند و بر اندازه سایر سلولها تاثیر می گذارند . آیا نمی شود متن این سلولها شکسته شده و سطر بجای طول ، از ارتفاع بزرگتر شود و یا حتی طول و عرض سطرها و ستونها را کاربر تعیین کند؟ باتشکر

    • یونس ابراهیمی پاسخ دادن

      سلام ، خواهش می کنم

      dataGridView1.Columns[0].DefaultCellStyle.WrapMode = DataGridViewTriState.True;
  6. erfan پاسخ دادن

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

  7. erfan پاسخ دادن

    مهندس جان کارم خیلی گیرکرده ممنون میشم کمکم کنید

    • یونس ابراهیمی پاسخ دادن

      سلام، سوالتونو توی بخش پرسش و پاسخ مطرح بفرمایید