آموزش پرینت گرفتن از دیتاگریدویو در سی شارپ

در این آموزش می خواهیم، نحوه پرینت گرفتن از داده های دیتاگریدویو را با استفاده از ابزارهای پیشفرض ویژوال استودیو به شما آموزش دهیم. ابتدا یک برنامه ویندوزی ایجاد کرده و کنترل های لازم را به صورت زیر بر روی فرم قرار دهید :
print-of-datagridview-in-c#-01

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

private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.Columns.Add("Column1", "First Name");
    dataGridView1.Columns.Add("Column2", "Last Name");
    dataGridView1.Columns.Add("Column3", "Age");

    dataGridView1.Rows.Add("Edward", "Lyons", 17);
    dataGridView1.Rows.Add("Monica", "Ward", 16);
    dataGridView1.Rows.Add("Joann", "Jordan", 20);
}

بر روی کنترل printDocument دوبار کلیک کرده و کدهای زیر را بنویسید :

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    int height = 0;
    int i = 0;
    Pen pen = new Pen(Brushes.Black, 2.5f);

    //Age Column
    e.Graphics.FillRectangle(Brushes.DarkGray, new Rectangle(300, 100, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawRectangle(pen, new Rectangle(300, 100, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawString(dataGridView1.Columns[0].HeaderText.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(300, 100, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
           
    //Last Name Column
    e.Graphics.FillRectangle(Brushes.DarkGray, new Rectangle(200, 100, dataGridView1.Columns[1].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawRectangle(pen, new Rectangle(200, 100, dataGridView1.Columns[1].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawString(dataGridView1.Columns[1].HeaderText.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(200, 100, dataGridView1.Columns[1].Width, dataGridView1.Rows[0].Height));

    //First Name Column
    e.Graphics.FillRectangle(Brushes.DarkGray, new Rectangle(100, 100, dataGridView1.Columns[2].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawRectangle(pen, new Rectangle(100, 100, dataGridView1.Columns[2].Width, dataGridView1.Rows[0].Height));
    e.Graphics.DrawString(dataGridView1.Columns[2].HeaderText.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(100, 100, dataGridView1.Columns[2].Width, dataGridView1.Rows[0].Height));

    height = 100;
    while (i < dataGridView1.Rows.Count)
    {
        if (height > e.MarginBounds.Height)
        {
            height = 100;
            e.HasMorePages = true;
            return;
        }
        height += dataGridView1.Rows[0].Height;

        e.Graphics.DrawRectangle(pen, new Rectangle(200 + dataGridView1.Columns[0].Width, height, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
        e.Graphics.DrawString(dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(200 + dataGridView1.Columns[0].Width, height, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));

        e.Graphics.DrawRectangle(pen, new Rectangle(100 + dataGridView1.Columns[0].Width, height, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
        e.Graphics.DrawString(dataGridView1.Rows[i].Cells[1].FormattedValue.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(100 + dataGridView1.Columns[1].Width, height, dataGridView1.Columns[1].Width, dataGridView1.Rows[0].Height));

        e.Graphics.DrawRectangle(pen, new Rectangle(100, height, dataGridView1.Columns[0].Width, dataGridView1.Rows[0].Height));
        e.Graphics.DrawString(dataGridView1.Rows[i].Cells[2].FormattedValue.ToString(), dataGridView1.Font, Brushes.Black, new Rectangle(100, height, dataGridView1.Columns[2].Width, dataGridView1.Rows[0].Height));     
               
        i++;
    }
}

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

private void button1_Click(object sender, EventArgs e)
{
    printPreviewDialog1.Document = printDocument1;
    printPreviewDialog1.ShowDialog();
}

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

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

  1. mysun پاسخ دادن

    بسیار ممنون از لطف شما. موفق و پیروز باشید.

  2. سینا پاسخ دادن

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

  3. علی بامدادي پاسخ دادن

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

  4. حمید پاسخ دادن

    slm
    aga man nokaretam karet doroste khodayish

  5. epic11 پاسخ دادن

    خسته نباشید. می خواستم بپرسم نقش i در دستورات بالا چیه؟ چرا نمیشناسه

    • Developer0400 پاسخ دادن

      سلام حق با شماست . اصلاحش کردم . باید متغیر i را تعریف کنید .
      سپاسگزارم

  6. شهرام پاسخ دادن

    سلام،من می خوام وقتی می خوام پرینت بگیرم،روی دکمه که کلیک می کنم در پیش نمایش کل اطلاعات دیتا گرت ویوم نشان
    بده و چاپ کنه نه مقدار ۱۰۰
    ممنون میشم کمک کنید
    با تشکر

    • احمد محبی پاسخ دادن

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

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

        سلام ، خواهش می کنم
        سوال => بخش پرسش و پاسخ (اون کادر زرد بالای بالای صفحه رو بخونید!)

  7. علی بامدادي پاسخ دادن

    در کد نویسی که انجام دادید مشکلی وجود داره با کد های سایت تطبیق بدید.

  8. حسین پاسخ دادن

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

  9. سالم پاسخ دادن

    سلام
    چطور میشه فونت پرینت گرفتن از دیتا گرد ویو رو بزرگتر کرد؟

  10. محمد رضا پاسخ دادن

    سلام یه سوال اگه متن یه فیلد بیشتر از اندازه باشه تو پیرینت یه ستون تو صفحه دوم چاپ میشه راهش چیه که تو چند خط چاپ شه که ستون بیش از حد
    بزرگ نشه

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

      یه راهش شاید این باشه که اون سلول ها رو چند خطی بنویسی

      dataGridViewControl.Columns[ColumnIndexOrName].DefaultCellStyle.WrapMode =
       DataGridViewTriState.True;

      برای ایجاد خط جدید در هنگام تایپ از کلید ترکیبی Shift+Enter استفاده کنید.

      ممنون میشم که سوالتونو توی انجمن مطرح بفرمایید.

  11. محسن خیبری پاسخ دادن

    با سلام ، ممنون از سایت خوبتون
    خواستم بپرسم چطور میتونم یک سری اطلاعات دیتا گرید ویو بدون پیش نمایش پرینت بگیرم .
    مس چاپ فیش در نرم افزارهای مدیریت فروشگاه که وقتی محصولات رو ثبت میکنن با زدن دکمه ثبت
    فیش خرید پرینت گرفته میشه .
    ممنون میشم پاسخ بدین

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

      سلام دوست عزیز…ممنون از لطفتون
      ممنون میشم سوالتونو توی بخش پرسش و پاسخ مطرح بفرمایید
      با تشکر

  12. مهدي پاسخ دادن

    با سلام و سپاس از آموزش شما
    مشکل من اینه که بعد از نمایش ستون ها ستونی که مربوط به ساعت هست یا مشکل مواجه میشه.
    مثلا ساعت ۲۲:۵۰ رو بصورت ۵۰:۲۲ نمایش میده.لطفا راهنمایی کنید

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

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

  13. محمد داوری پاسخ دادن

    سلام من با ارور no printers are installed مواجه میشم.چه راه حلی پیشنهاد می کنید؟

  14. atrb1390 پاسخ دادن

    سلام- من یک متن پیش فرض مانند دعوتنامه دارم که دارای جاهای خالی مانند …آقای ………….. – مسئول محترم ……………….- و متن ثابت که وسطش تاریخ جلسه و یکی دوتا جای خالی دیگه هست و در آخر آدرس ….شخص دعوت شده..
    میخوام از بانک اطلاعاتی من که شامل نام و نام خانوادگی و مسئولیت و آدرس و تلفن شون هست داده های هرشخص بر روی این فرم فراخوانی بشه و دعوتنامه هر شخص داخل یک برگ A4 چاپ بشه چکار باید بکنم؟ ممنون میشم راهنمایی بفرمایید یا اگه نمونه برنامه را دارید واسم بفرستید
    ۲- اگه بخوام اطلاعات بعضی از افراد رو مثلا انتخاب کنم توی دیتا گریدویو و بفرستم چاپ بشه نه همه افراد؟
    بازم ممنون از سایت خوبتون

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

      سلام دوست عزیز… همین متن رو کپی کنید و سوالتونو توی بخش پرسش و پاسخ مطرح بفرمایید.
      با تشکر

  15. موسی پاسخ دادن

    سلام
    من سه تا جدول را داخل یک پنل گذاشتم میخوام از پنل پرینت بگیرم ولی قسمت پائین اسکرول را پرینت نمیگره ؟
    میشه بی زحمت کمکم کنید.

  16. امیر پاسخ دادن

    سلام چرا بیش یک صفحه روچاپ نمیکنه