0
votes

i have to come out with a program to export selected rows datagridview to excel with the respective headers. I have done exporting the whole datagridview to excel, but now i want to do it with just the selected row. How can i do it?

here's my codes for exporting the whole datagridview to excel

private void GenerateExcel(DataTable table3, string excelSheetName) {

        string fileName = "TestingofDSI";
        //string currentDirectorypath = "C:\testingdsi";
        string currentDirectorypath = Environment.CurrentDirectory;
        string finalFileNameWithPath = string.Empty;

        fileName = string.Format("{0}_{1}", fileName, DateTime.Now.ToString("dd-MM-yyyy"));
        finalFileNameWithPath = string.Format("{0}\\{1}.xlsx", currentDirectorypath, fileName);


        var newFile = new FileInfo(finalFileNameWithPath);


        using (var package = new ExcelPackage(newFile))
        {

            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(excelSheetName);


            if (table != null)
            {

                worksheet.Cells["A1"].LoadFromDataTable(table3, true, OfficeOpenXml.Table.TableStyles.Medium2);
                //worksheet.Cells["A1"].LoadFromDataTable(table, true, TableStyles.None);


                /*  package.Workbook.Properties.Title = @"This code is part of tutorials available at http://bytesofcode.hubpages.com";
                  package.Workbook.Properties.Author = "Bytes Of Code";
                  package.Workbook.Properties.Subject = @"Register here for more http://hubpages.com/_bytes/user/new/";*/


                package.Save();

                MessageBox.Show(string.Format("File name '{0}' generated successfully.", fileName)
                    , "File generated successfully!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {

                MessageBox.Show("please load data from database!");

   }


        }
    }

//code for binding data

   private void loadButton_Click(object sender, EventArgs e)
    {
             GetData(" select * from jacksonpc.product;");
            dataGridView1.DataSource = bindingSource1;
     }

    private void GetData(string selectCommand)
      {
        try
        {
            // Specify a connection string. Replace the given value with a 
            // valid connection string for a Northwind SQL Server sample
            // database accessible to your system.
            String connectionString = "datasource=localhost;port=3306;username=root;password=1234";

            // Create a new data adapter based on the specified query.
            dataAdapter = new MySqlDataAdapter(selectCommand, connectionString);

            // Create a command builder to generate SQL update, insert, and
            // delete commands based on selectCommand. These are used to
            // update the database.
            MySqlCommandBuilder commandBuilder = new MySqlCommandBuilder(dataAdapter);

            // Populate a new data table and bind it to the BindingSource.
            table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            dataAdapter.Fill(table);
            bindingSource1.DataSource = table;



            /* table2 = new DataTable();
             table2.Locale = System.Globalization.CultureInfo.InvariantCulture;
             dataAdapter.Fill(table2);
             bindingSource2.DataSource = table2;
             // Resize the DataGridView columns to fit the newly loaded content.*/

                        dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
     }
1
Have you added any checkbox to select the row?Arshad
@Arshad do i have to do it? is there any other alternative way?user2837847
so how you will identify the selected rows, if user wants to select multiple rowsArshad
Do you want to work with single rowArshad
@Arshad i am able to identify by clicking on one of the button-like and it will highlight the entire row. I want to work with more than a one row.user2837847

1 Answers

0
votes

You can change datagridview SelectionMode property in constructor or Form_Load

dataGridView1.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;
Then user will able to select multiple rows which the help of CTRL or Shift on you print method you have to create a DataTable with selected Rows:

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
    //Create a DataTable with same column name
    //fill each column like row.Cells[1].Value.ToString();              

}