Экспорт DataTable в Excel, используя программно созданный DevExpress GridView

1

Я пытаюсь экспортировать DataTable в Excel с помощью программно созданного DevExpress GridControl. Код, который я экспортировал столбцы GridView, но без каких-либо заполненных строк данных. Вот пример кода (tblErrors - это параметр DataTable, переданный методу):

GridControl control = new GridControl();                
GridView view = new GridView();
control.ViewCollection.Add(view);
control.MainView = view;
foreach (DataColumn tCol in tblErrors.Columns)
{
    GridColumn gCol = new GridColumn();
    gCol.Name = "col" + tCol.ColumnName;
    gCol.FieldName = tCol.ColumnName;
    gCol.UnboundType = DevExpress.Data.UnboundColumnType.Bound;
    view.Columns.Add(gCol);
    gCol.Visible = true;
}
control.DataSource = tblErrors;
control.Visible = true;
view.ExportToXlsx(String.Format(@"{0}\{1} Error Report.xlsx", Environment.GetFolderPath(Environment.SpecialFolder.Desktop), DateTime.Today.ToString("yyyy-MM-dd")));

Какие-нибудь идеи относительно того, что мне не хватает?

Теги:
winforms
devexpress
xtragrid

1 ответ

1
Лучший ответ

В то время, когда вы вызываете view.ExportToXlsx этот вид (и весь GridControl) не инициализируется и не загружается.
Вы можете проверить это очень просто - просто установите view.ExportToXlsx останова на view.ExportToXlsx и вы увидите, что в этот момент view.RowCount == 0, так что пока ничего не экспортировать.

Фактически, эта "окончательная инициализация" произойдет, когда управление станет видимым. Но в вашем коде вы не добавляете control над коллекцией Controls Form или UserControl, поэтому на самом деле она никогда не будет видна и не будет содержать строк.

Если это предполагаемое поведение, и вы хотите просто экспортировать данные из вашей таблицы данных в Excel с помощью GridControl в качестве "адаптера" и не показывать этот GridControl в форме - вы можете сделать какой-то трюк

control.DataSource = tblErrors;
Controls.Add(control);
control.ForceInitialize();
view.ExportToXlsx(....
Control.Remove(control);

Обратите внимание, что это может привести к некоторому "миганию" элемента управления, если ваша сумма данных в tblErrors велика, потому что управление фактически добавляется в форму, затем принудительно инициализирует, экспортирует данные и затем управляет удалением из формы.

Что касается меня - это не лучший подход для экспорта данных из dataTable в Excel. Подумайте об использовании вместо некоторых библиотек для прямой записи в файлы Excel, например, NPOI.

ОБНОВИТЬ

После некоторых мыслей - вы можете предотвратить "мигание", о котором я упомянул, установив control.Visible = false; перед добавлением контроля в форму. Но этот подход с использованием GridControl по-прежнему не самый лучший с моей точки зрения.

  • 0
    Спасибо Энди, я действительно ценю помощь. Это сработало так, как я надеялся. Я также посмотрю на библиотеку NPOI, которую вы предложили.
  • 0
    @TheonP Не за что. ;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню