ExcelDataSource 객체는 문서모델을 생성하지 않고 Excel의 내용을 추출할 수 있게 설계가 되어 있는데요. ExcelDataSource를 GridControl에 넣기 전에 컬럼명을 출력한다든지, Rows를 확인해야 하는 작업이 있을 수 있습니다. 대용량을 빠르게 DataSource로 만들기에는 적합하나, Data를 접근해야 하는 경우가 생기면 약간 머리가 아파집니다. 이럴 경우라면 그냥 SpreadSheet로 엑셀을 컨트롤하는 것이 나을 수 있습니다.
아래의 코드는 DevExpress 팀에서 제공하는 DataTable로 변경하는 Extention함수를 제공하고 있습니다.
// ExcelDataSource 를 DataTable로 변경하는 Extention 함수
public static DataTable ToDataTable(this ExcelDataSource excelDataSource)
{
IList list = ((IListSource)excelDataSource).GetList();
DevExpress.DataAccess.Native.Excel.DataView dataView = (DevExpress.DataAccess.Native.Excel.DataView)list;
List<PropertyDescriptor> props = dataView.Columns.ToList<PropertyDescriptor>();
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (DevExpress.DataAccess.Native.Excel.ViewRow item in list)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}