如何解决无法强制转换类型为';的对象;System.Data.DataView';键入';System
本文关键字:System 对象 键入 DataView Data 类型 转换 解决 何解决 | 更新日期: 2023-09-27 18:21:20
我在表单上有Devexpress GridControl,
我想把这个网格上的数据发送到excel
并且我不想使用ExportToExcel方法执行此操作
我已在谷歌上搜索并找到此代码
但此代码用于.Net的DataGrid控制并且在尝试转换时会出现错误DevExpress.XtraGrid.Views.Grid.GridView到System.Data.DataView
这是代码
public string LastCoulmLetter(int coulmnCount)
{
string finalColLetter = string.Empty;
string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int colCharsetLen = colCharset.Length;
if (coulmnCount > colCharsetLen)
{
finalColLetter = colCharset.Substring(
(coulmnCount - 1) / colCharsetLen - 1, 1);
}
finalColLetter += colCharset.Substring(
(coulmnCount - 1) % colCharsetLen, 1);
return finalColLetter;
}
public void FromGridToExcel()
{
if (gridView1.RowCount <= 0)
return;
Excel.Application xls = new Excel.Application();
Excel.Workbook wb;
Excel.Worksheet sheet;
object SalakObje = System.Reflection.Missing.Value;
wb = xls.Workbooks.Add(SalakObje);
sheet = (Excel.Worksheet)wb.ActiveSheet;
sheet.Name = "Result";
xls.Visible = true;
DataTable dt = (DataTable)gridView1.DataSource; // Error comes in here
// Copy the DataTable to an object array
object[,] rawData = new object[dt.Rows.Count + 1, dt.Columns.Count];
// Copy the column names to the first row of the object array
for (int col = 0; col < dt.Columns.Count; col++)
{
rawData[0, col] = dt.Columns[col].ColumnName;
}
// Copy the values to the object array
for (int col = 0; col < dt.Columns.Count; col++)
{
for (int row = 0; row < dt.Rows.Count; row++)
{
rawData[row + 1, col] = dt.Rows[row].ItemArray[col];
}
}
// Fast data export to Excel
string excelRange = string.Format("A1:{0}{1}",LastCoulmLetter(dt.Columns.Count), dt.Rows.Count + 1);
sheet.get_Range(excelRange, Type.Missing).Value2 = rawData;
sheet.get_Range(excelRange).Columns.AutoFit();
}
那么问题是什么以及如何解决
问题似乎是您的DataSource
是DataView
,而不是DataTable
。
一些选项:
如果您想使用相同的过滤器,请将其转换为DataView
:
DataView dv = (DataView)gridView1.DataSource;
如果您想要原始数据,请使用.Table
属性来获取源表:
DataTable dt = ((DataView)gridView1.DataSource).Table;
试试这个:
DataTable dt = ((DataView)gridView1.DataSource).Table;