2012-01-24 136 views
1

我有窗体上的Devxpress GridControl,
,我想发送这个网格上的数据到Excel 。
,我不想与ExportToExcel的方法来做到这一点
我用Google搜索,发现这个代码
但是这个代码是为.NET 的DataGrid控件,当它试图转换 DevExpress.XtraGrid.Views它给出了一个错误.Grid.GridView到System.Data.DataView
这里是代码如何解决无法投型'System.Data.DataView'类型的对象键入'System.Data.DataTable'错误

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

那么是什么问题以及如何解决它

回答

4

这个问题似乎是你DataSourceDataView,而不是DataTable

一些选项:

丢给,如果你想使用相同的过滤器DataView

DataView dv = (DataView)gridView1.DataSource; 

使用.Table财产,如果你想要的原始数据,以获取源表:

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

试试这个:

DataTable dt = ((DataView)gridView1.DataSource).Table; 
相关问题