A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://103.13.28.148/cstovb/cstovb/): failed to open stream: HTTP request failed!

Filename: libraries/Converter.php

Line Number: 134

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 134
Function: file_get_contents

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior

Filename: libraries/Converter.php

Line Number: 136

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 136
Function: strpos

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://103.13.28.148/cstovb/cstovb/): failed to open stream: HTTP request failed!

Filename: libraries/Converter.php

Line Number: 134

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 134
Function: file_get_contents

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior

Filename: libraries/Converter.php

Line Number: 136

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 136
Function: strpos

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://103.13.28.148/cstovb/cstovb/): failed to open stream: HTTP request failed!

Filename: libraries/Converter.php

Line Number: 134

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 134
Function: file_get_contents

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior

Filename: libraries/Converter.php

Line Number: 136

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 136
Function: strpos

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: Warning

Message: file_get_contents(http://103.13.28.148/cstovb/cstovb/): failed to open stream: HTTP request failed!

Filename: libraries/Converter.php

Line Number: 134

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 134
Function: file_get_contents

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

A PHP Error was encountered

Severity: 8192

Message: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior

Filename: libraries/Converter.php

Line Number: 136

Backtrace:

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 136
Function: strpos

File: /var/www/ironpdf.com/application/libraries/Converter.php
Line: 92
Function: convert_cs_to_vb_with_vbconverter

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 1814
Function: convert_cs_to_vb

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 559
Function: render_cs_window

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 532
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 561
Function: {closure}

File: /var/www/ironpdf.com/application/libraries/MarkdownProcessor.php
Line: 28
Function: render_language_type

File: /var/www/ironpdf.com/application/libraries/Render.php
Line: 340
Function: processMarkdownViewContent

File: /var/www/ironpdf.com/application/controllers/Products/Blog.php
Line: 77
Function: render_products_view

File: /var/www/ironpdf.com/index.php
Line: 292
Function: require_once

Export DataGridView to Excel with Column Headers in C#Skip to footer content
USING IRONXL

How to Export a DataGridView to Excel with Column Headers in C#

Get stated with IronXL now.
green arrow pointer

Exporting data from a Windows Forms DataGridView control to Excel format is a common requirement, but developers often struggle with a critical issue: missing column headers in the exported file. When you need to c export datagridview to excel with column headers, you want a solution that preserves all your data and formatting perfectly. While traditional approaches using Microsoft Office Interop can be slow and require MS Excel installation, IronXL provides a streamlined solution that handles the datagridview to excel conversion seamlessly.

In this post, we'll show you how to export DataGridView data to Excel with all the data and column headers intact using IronXL - a powerful .NET Excel library that works without Microsoft Office dependencies. You'll learn how to implement a complete export solution that handles headers, data types, and user-friendly file saving in just a few lines of code.

We’ll also refer to common pitfalls, demonstrate examples with object obj usage, and provide a small amount of commentary and notes so you can extend the example further.

What Makes IronXL the Ideal Choice?

IronXL simplifies Excel operations in .NET applications by providing an intuitive API that doesn't require Microsoft Excel installation. Unlike Interop-based solutions, IronXL runs independently, making it perfect for server environments and machines without Office.

The library handles all Excel formats including XLSX, XLS, and CSV, while maintaining data integrity and formatting throughout the export process. Developers can easily copy data, extend sheets, and delete or add rows without relying on Excel being installed.

Setting Up Your Windows Forms Project

First, create a new Windows Forms Application in Visual Studio. Once your project is ready, install IronXL through the NuGet Package Manager. Open the Package Manager Console and run:

Install-Package IronXL.Excel

After installation, add these essential namespaces to your form:

using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
using IronXL;
using System;
using System.Data;
using System.Windows.Forms;
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

These imports provide access to IronXL's Excel functionality, DataTable operations, and Windows Forms controls needed for the export process.

Creating the DataGridView with Sample Data

Let's build a simple interface with a DataGridView populated with a sample data source. You might also be importing data from a CSV or database, the same DataTable approach below works for imported datasets. Add a new DataGridView and a Button to your form through the Visual Studio designer, then use this code to set up the data:

private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
private void Form1_Load(object sender, EventArgs e)
{
    // Example object usage
    object obj = "Initializing DataTable"; 
    Console.WriteLine(obj);
    // Create a DataTable with sample data
    DataTable dt = new DataTable();
    // Add columns with descriptive headers
    dt.Columns.Add("Product ID", typeof(int));
    dt.Columns.Add("Product Name", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock Quantity", typeof(int));
    // Add sample rows
    dt.Rows.Add(1001, "Laptop", 999.99m, 15);
    dt.Rows.Add(1002, "Mouse", 29.99m, 50);
    dt.Rows.Add(1003, "Keyboard", 79.99m, 30);
    dt.Rows.Add(1004, "Monitor", 299.99m, 12);
    dt.Rows.Add(1005, "Headphones", 89.99m, 25);  
    // Bind the DataTable to DataGridView Control
    dataGridView1.DataSource = dt;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

This example creates a DataTable and binds it to the grid. Even with a small amount of data, the approach scales well for larger tables. The column names defined here will become the headers in your Excel file.

The sample data represents a simple product inventory, making it easy to verify the export worked correctly. For more complex data binding scenarios, Microsoft's documentation on DataGridView data binding provides additional examples.

This creates a DataGridView with populated with all the data from our code:

How to Export a DataGridView to Excel with Column Headers in C#: Figure 1 - Sample data in a DataGridView

Implementing the Export with Column Headers

Now for the main functionality, exporting the DataGridView to Excel while preserving column headers. Add this method to handle the export button click:

private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
private void btnExport_Click(object sender, EventArgs e)
{
    // Create a new Excel workbook
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Exported Data");
    // Export column headers
    for (int col = 0; col < dataGridView1.Columns.Count; col++)
    {
        worksheet.SetCellValue(0, col, dataGridView1.Columns[col].HeaderText);
    }
    // Export data rows
    for (int row = 0; row < dataGridView1.Rows.Count; row++)
    {
        // Skip the last empty row (used for adding new rows in DataGridView)
        if (dataGridView1.AllowUserToAddRows && row == dataGridView1.Rows.Count - 1)
            continue;
        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            var cellValue = dataGridView1.Rows[row].Cells[col].Value;
            if (cellValue != null)
            {
                worksheet.SetCellValue(row + 1, col, cellValue.ToString());
            }
        }
    }
    // Show save dialog
    using (SaveFileDialog saveFileDialog = new SaveFileDialog
    {
        Filter = "Excel Files|*.xlsx",
        FileName = "DataGridView_Export.xlsx"
    })
    {
        if (saveFileDialog.ShowDialog() == DialogResult.OK)
        {
            workbook.SaveAs(saveFileDialog.FileName);
            MessageBox.Show("Export completed successfully!", "Success",
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

This export method performs several crucial steps:

  1. Creating the Workbook: WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX) initializes a new Excel file in memory
  2. Adding a Worksheet: The CreateWorkSheet method adds a named sheet to hold your data
  3. Exporting Headers: The first loop iterates through DataGridView columns, extracting the HeaderText property and writing it to row 0
  4. Exporting the Data: The nested loops process each table cell, with null checking to prevent errors
  5. User-Friendly Saving: SaveFileDialog lets users choose the file location and name

The key to preserving headers lies in accessing the dataGridView1.Columns[i].HeaderText property, which contains the display text for each column header. You can add a comment above each export step to clarify the purpose for other developers or for future maintenance.

How to Export a DataGridView to Excel with Column Headers in C#: Figure 2 - Output Excel file with the exported sample data

Handling Common Excel File Data Export Scenarios

When working with real-world data, you'll encounter various scenarios that requ

ire special handling:

  • Empty Cells: The null check in our code prevents errors when cells contain no data. Empty cells appear as blank in Excel, maintaining the grid structure.
  • Mixed Data Types: IronXL automatically handles different data formats. Numbers remain numeric in Excel, allowing calculations, while text stays as strings.
  • Special Characters: Column headers with special characters export correctly. IronXL handles encoding automatically, preserving characters like &, <, >, and accented letters.

When exporting documents, errors can occur. Use try-catch-finally for robust handling:

try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try 
{
    // Export code here
}
catch (Exception ex)
{
    MessageBox.Show($"Export failed: {ex.Message}", "Error", 
                   MessageBoxButtons.OK, MessageBoxIcon.Error);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

IronXL preserves details of your Excel sheet such as formatting, headers, and special characters. For more advanced scenarios, you can check the IronXL documentation as a reference for tasks such as file security, cell styling, or formula preservation.

Conclusion

Exporting DataGridView to Excel with column headers is straightforward with IronXL. The library handles the complex Excel file operations while you focus on your application logic. Whether you choose direct cell-by-cell export or the DataTable approach, your column headers will transfer perfectly to Excel. This makes it easy to convert your DataGridView data to Excel format without losing out on any informative headers or lose data.

We hope this article helped you implement a reliable solution for your DataGridView exporting needs, and you can go on confidently with the skills you learned here today to export your DataGridView's to Excel format. If you’re looking for a reliable C# exporting DataGridView to Excel with column headers solution, IronXL provides a clean, dependency-free way to achieve it.

Ready to implement this in your project? Start with IronXL's free trial to explore its full capabilities. For production use, licensing starts at competitive rates with comprehensive support included.

Regan Pun
Software Engineer
Regan graduated from the University of Reading, with a BA in Electronic Engineering. Before joining Iron Software, his previous job roles had him laser-focused on single tasks; and what he most enjoys at Iron Software is the spectrum of work he gets to undertake, whether it’s adding value to ...Read More
Ready to Get Started?
Nuget Downloads 1,648,013 | Version: 2025.10 just released