首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

打印.NET DataGridView

您好!您提到的问题是关于如何在 .NET 应用程序中打印 DataGridView 控件。以下是一些建议和代码示例,以帮助您实现这一目标。

1. 使用 PrintDocument 类

您可以使用 PrintDocument 类来实现 DataGridView 的打印功能。以下是一个简单的示例代码:

代码语言:csharp
复制
private void PrintDataGridView(DataGridView dgv)
{
    PrintDocument printDoc = new PrintDocument();
    printDoc.PrintPage += (sender, args) =>
    {
        int marginLeft = args.MarginBounds.Left;
        int marginTop = args.MarginBounds.Top;
        int marginRight = args.MarginBounds.Right;
        int marginBottom = args.MarginBounds.Bottom;

        // Calculate the total width of the columns
        int totalWidth = 0;
        foreach (DataGridViewColumn col in dgv.Columns)
        {
            totalWidth += col.Width;
        }

        // Calculate the ratio of the printable area width to the total width
        double ratio = args.MarginBounds.Width / (double)totalWidth;

        // Calculate the new width and height of the DataGridView
        int newWidth = (int)(dgv.Width * ratio);
        int newHeight = (int)(dgv.Height * ratio);

        // Create a new DataGridView to print
        DataGridView printDGV = new DataGridView();
        printDGV.ColumnHeadersHeight = dgv.ColumnHeadersHeight;
        printDGV.Columns.AddRange(dgv.Columns.ToArray());
        printDGV.Rows.AddRange(dgv.Rows.ToArray());
        printDGV.Size = new Size(newWidth, newHeight);

        // Calculate the number of pages
        int numPages = (int)Math.Ceiling((double)printDGV.Height / args.MarginBounds.Height);

        // Print each page
        for (int page = 0; page < numPages; page++)
        {
            // Create a new bitmap for the page
            Bitmap bm = new Bitmap(printDGV.Width, printDGV.Height);

            // Draw the DataGridView on the bitmap
            printDGV.DrawToBitmap(bm, new Rectangle(0, page * args.MarginBounds.Height, printDGV.Width, printDGV.Height));

            // Draw the bitmap on the printer graphics
            args.Graphics.DrawImage(bm, marginLeft, marginTop);

            // Move the margin top for the next page
            marginTop += args.MarginBounds.Height;

            // Invalidate the bitmap and the print preview
            bm.Dispose();
            args.HasMorePages = (page < numPages - 1);
        }
    };

    // Print the document
    printDoc.Print();
}

2. 使用 DataGridView 的内置打印功能

DataGridView 控件还提供了一些内置的打印功能,您可以直接调用这些方法来实现打印。以下是一个简单的示例代码:

代码语言:csharp
复制
private void PrintDataGridView(DataGridView dgv)
{
    PrintDialog printDialog = new PrintDialog();
    PrintDocument printDoc = dgv.PrintDocument;
    printDialog.Document = printDoc;

    // Set the print settings
    printDoc.DefaultPageSettings.Landscape = true;
    printDoc.DefaultPageSettings.Margins = new Margins(50, 50, 50, 50);

    // Show the print dialog and print the document
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        printDoc.Print();
    }
}

希望这些信息对您有所帮助!如果您有其他问题或需要更多详细信息,请随时告诉我。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

推荐一款DataGridView打印解决方案

今天有朋友请教在CS的WinForm中如何打印DataGridView中的内容。...【打印预览画面】 ? 解决方案构成 这个打印解决方案由一个打印设置的窗体,及一个打印类组成。...可用于以下场景: 1、显示的数据量较大,但又没有必要打印全部数据的时候 2、希望打印出的列宽能自动适应页面宽度 打印类主要方法 Print_DataGridView(共有): 被外部类调用的主方法...PrintDoc_BeginPrint(私有): 初始化一些打印变量 PrintDoc_PrintPage(私有): 执行打印工作 DrawFooter(私有): 页脚的处理部分 打印类代码.../* ***************************************************  * DataGridView打印类  * 原作者:Afrasiab Cheraghi

1.9K20
  • 一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-演示ORM对象与DataGridView的绑定技术-商品字典的另一个实现

    由于好多朋友都问我,你的例子中大量使用ListView控件,很想知道是否可以支持DataGridView控件,所以我就有想到重新用DataGridView写一下“商品字典”模块。...今天本文的主要内容是AgileEAS.NET平台中的ORM对象与DataGridView的绑定,在AgileEAS.NET平台的ORM体系之中,有一个ITable接口,他继承了数据绑定接口IListSource...sender, EventArgs e) 19: { 20: if (dictList == null) 21: { 22: MessageBox.Show("没有需要打印的数据...打印预览: ? 导出报表,选择导出Excel格式: ?      ...本文我就说到这里,对AgileEAS.NET平台感兴趣的朋友呢,可以下载了完整代码之后自己看看,有问题请及时的和我联系。

    1.1K50

    WinForm 为 DataGridViewCell 绑定 DataGridView

    对外提供一个 public 的方法: // 正常 Type1 是 JSON 的数据集或者 BSON 的数据集 public void FillDataGridView(Type1 data, DataGridView...         // 为 gridView 添加数据     foreach(Type2 d in data){         if(d 是复杂的数据类型){             // 创建子 DataGridview...            // 属性根据自己的需要设定             DataGridView view = new DataGridView();             view.AllowUserToAddRows... 以及子 DataGridview 设置响应事件             // 以至于达到我们想要的效果:点击 cell 用另外一个 DataGridview 显示出该 cell 中的数据             ...= null && cell.Tag is DataGridView)     {         DataGridView view = (cell.Tag as DataGridView);

    1K50

    bindingnavigator如何与datagridview绑定

    new BindingSource(); 2: bs.DataSource = dateTabel1; 3: bindingNavigator1.BindingSource = bs; 4: dataGridView1...因此定义一个BindingSource ,并将BindingNavigator 和DataGridView的数据源都设置为BindingSource ,可保证BindingNavigator 和DataGridView...———————————————————————————————————————- BindingSource控件介绍 BindingSource控件是.NET Framework 2.0提供的新控件之一...如果你是通过从[数据源]拖拽表到Form上生成的DataGridView及数据,那就用VS05自动生成的 BindingNavigator进行增、删、改。通常你甚至连一行代码都不用写。...转载于:https://my.oschina.net/bv10000/blog/99299 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158172.html原文链接

    1.8K20
    领券