如何解决无法投射“System.Data.DataView”types的对象来键入“System.Data.DataTable”错误

我在表单上有Devxpress GridControl,
我想发送这个网格上的数据,以优秀。
我不想用ExportToExcel方法做到这一点
我GOOGLE了,发现这个代码
但是这个代码是用于.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

一些选项:

如果您想使用相同的filter,将其转换为DataView

 DataView dv = (DataView)gridView1.DataSource; 

如果需要原始数据,请使用.Table属性获取源表:

 DataTable dt = ((DataView)gridView1.DataSource).Table; 

试试这个:

 DataTable dt = ((DataView)gridView1.DataSource).Table;