在网上找到的dataGridView数据导出到excel的代码,看了一下,明白了一点,源码如下:
 
 private void button1_Click(object sender, EventArgs e)
        {
                      ToExcel(dataGridView1);//调用的导出到excel方法
        }        //导出到excel方法
        public static void ToExcel(DataGridView grid)
        {
            System.Data.DataTable mytable = (System.Data.DataTable)grid.DataSource;
            try
            {
                Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
                int rowIndex, colIndex;
                rowIndex = 1;
                colIndex = 0;
                Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);
                if (grid.Rows.Count > 0)
                {
                    foreach (DataGridViewColumn colu in grid.Columns)
                    {
                        if (colu.Visible)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[1, colIndex] = colu.HeaderText;
                        }
                    }
                    for (int row = 0; row < mytable.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < grid.Columns.Count; col++)
                        {
                            if (grid.Columns[col].Visible)
                            {
                                colIndex = colIndex + 1;
                                if (grid.Columns[col].CellType.Name == "DataGridViewComboBoxCell")
                                    xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].FormattedValue;
                                else
                                    xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].Value;
                            }
                        }
                    }
                }
                else
                {
                    foreach (DataColumn Col in mytable.Columns)
                    {
                        colIndex = colIndex + 1;
                        xlApp.Cells[1, colIndex] = Col.ColumnName;
                    }
                    for (int row = 0; row < mytable.Rows.Count; row++)
                    {
                        rowIndex = rowIndex + 1;
                        colIndex = 0;
                        for (int col = 0; col < mytable.Columns.Count; col++)
                        {
                            colIndex = colIndex + 1;
                            xlApp.Cells[rowIndex, colIndex] = grid.Rows[row].Cells[col].Value;
                        }
                    }
                }
                xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[1, colIndex]).Font.Bold = true;
                xlApp.get_Range(xlApp.Cells[1, 1], xlApp.Cells[rowIndex, colIndex]).Borders.LineStyle = 1;
                xlApp.Cells.EntireColumn.AutoFit();
                xlApp.Cells.VerticalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
                xlApp.Visible = true;
            }
            catch(Exception ex)
            {
                MessageBox.Show("错误消息:"+ex.Message,"错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
        }但在运行时,出现 无法将类型为“System.Data.DataSet”的对象强制转换为类型“System.Data.DataTable”。的错误提示,如何解决

解决方案 »

  1.   

    System.Data.DataTable mytable = (System.Data.DataTable)grid.DataSource;
    在运行到这句时,无法将类型为“System.Data.DataSet”的对象强制转换为类型“System.Data.DataTable”。的错误提示,如何解决
      

  2.   

    试试
    System.Data.DataTable mytable =(grid.DataSource as DataSet).Tables[0];
      

  3.   

    grid.DataSource
    grid的DataSource从何而来? 里面存的不是DataTable吧 
      

  4.   

    System.Data.DataSet myDs = (System.Data.DataSet )grid.DataSource;
    System.Data.DataTable mytable ==myDs.Tables[0];
      

  5.   

    System.Data.DataSet myDs = (System.Data.DataSet )grid.DataSource;
    System.Data.DataTable mytable=myDs.Tables[0];
      

  6.   

    ToExcel(DataGridView grid),你调用的 “DataGridView grid” 的数据源不是DataTable