简体   繁体   中英

How to solve Unable to cast object of type 'System.Data.DataView' to type 'System.Data.DataTable' ERROR

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

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;

尝试以下方法:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM