CODEKILLER

반응형

ExcelDataSource를 DataTable로 변환하기
ExcelDataSource를 DataTable로 변환하기

ExcelDataSource 객체는 문서모델을 생성하지 않고 Excel의 내용을 추출할 수 있게 설계가 되어 있는데요. ExcelDataSource를 GridControl에 넣기 전에 컬럼명을 출력한다든지, Rows를 확인해야 하는 작업이 있을 수 있습니다. 대용량을 빠르게 DataSource로 만들기에는 적합하나, Data를 접근해야 하는 경우가 생기면 약간 머리가 아파집니다. 이럴 경우라면 그냥 SpreadSheet로 엑셀을 컨트롤하는 것이 나을 수 있습니다.

ExcelDataSource를 DataTable로 변환하기

아래의 코드는 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;
}
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band