无法将类型为“System.Data.DataSet”的对象强制转换为类型“System.Data.DataTable”。

yuanshidemeng2008 2012-09-23 11:47:03
在网上找到的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”。的错误提示,如何解决

...全文
880 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
鲸碳耗 2012-09-24
  • 打赏
  • 举报
回复
grid.DataSource
grid的DataSource从何而来? 里面存的不是DataTable吧
xxjltan 2012-09-24
  • 打赏
  • 举报
回复
ToExcel(DataGridView grid),你调用的 “DataGridView grid” 的数据源不是DataTable
一品梅 2012-09-24
  • 打赏
  • 举报
回复
System.Data.DataSet myDs = (System.Data.DataSet )grid.DataSource;
System.Data.DataTable mytable=myDs.Tables[0];
stonespace 2012-09-24
  • 打赏
  • 举报
回复
System.Data.DataSet myDs = (System.Data.DataSet )grid.DataSource;
System.Data.DataTable mytable ==myDs.Tables[0];
  • 打赏
  • 举报
回复
试试
System.Data.DataTable mytable =(grid.DataSource as DataSet).Tables[0];
yuanshidemeng2008 2012-09-23
  • 打赏
  • 举报
回复
System.Data.DataTable mytable = (System.Data.DataTable)grid.DataSource;
在运行到这句时,无法将类型为“System.Data.DataSet”的对象强制转换为类型“System.Data.DataTable”。的错误提示,如何解决

鲸碳耗 2012-09-23
  • 打赏
  • 举报
回复
代码有点长 是哪一句出错了呢

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧