How to solve Unable to cast object of type 'System.Data.DataView' to type 'System.Data.DataTable' ERROR
32,805
The problem appears to be that your DataSource
is a DataView
, not a DataTable
.
Some options:
Cast it to a DataView
if you want to use the same filters:
DataView dv = (DataView)gridView1.DataSource;
Use the .Table
property to get the source table if you want the raw data:
DataTable dt = ((DataView)gridView1.DataSource).Table;
Author by
namco
Updated on January 25, 2020Comments
-
namco over 4 years
i have Devxpress GridControl on the form,
and i want to send data on this grid to excel.
and i dont want to do this with ExportToExcel method
i have googled and found this code
but this code is for DataGrid control of .Net and it gives an error when it tries to convert DevExpress.XtraGrid.Views.Grid.GridView to System.Data.DataView
here is the codepublic 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(); }
So what is the problem and how to fix it