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;
Share:
32,805
namco
Author by

namco

Updated on January 25, 2020

Comments

  • namco
    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 code

    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();
    }
    

    So what is the problem and how to fix it