Как решить Невозможно привести объект типа «System.Data.DataView» к типу «System.Data.DataTable» ОШИБКА - PullRequest
1 голос
/ 24 января 2012

У меня есть Devxpress GridControl в форме,
и я хочу отправить данные по этой сетке, чтобы преуспеть.
и я не хочу делать это с методом ExportToExcel
я гуглил и нашел этот код
но этот код для управления DataGrid .Net и выдает ошибку при попытке конвертировать 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();
}

Так в чем проблема и как ее исправить

Ответы [ 2 ]

4 голосов
/ 24 января 2012

Проблема заключается в том, что ваш DataSource является DataView, а не DataTable.

Некоторые опции:

Приведите его к DataView, если хотитеиспользовать те же фильтры:

DataView dv = (DataView)gridView1.DataSource;

Используйте свойство .Table, чтобы получить исходную таблицу, если вы хотите необработанные данные:

DataTable dt = ((DataView)gridView1.DataSource).Table;
0 голосов
/ 24 января 2012

Попробуйте вместо этого:

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