本文主要是介绍DevExpress 利用动态创建GridControl导出Excel,并不显示在界面上,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
正常情况下,GridControl显示在界面上直接导出数据到excel是没问题的,在动态创建的时候如果不显示在界面上并不会把数据导到excel,一般的解决方法都是先添加导出后再隐藏或者释放掉,这种方法虽然如愿导出了数据,但是,想一想,这不是很多余么。
大伙有没有想过为什么显示到界面的时候才能导出数据内容呢?其实原理很简单,当对GridControl绑定数据的时候,就会在Form上实例化了 BindingContext对象,Ok知道这个情况,这样问题就很好解决了,只要在代码中直接实例化这个对象不就不需要到Form上自动实例化了么,
利用这个原理写了以下方法
/// <summary>/// 通过GridControl导出Excel/// </summary>/// <param name="dt"></param>/// <param name="fileName"></param>public static void ExportByGridControl(DataTable dt,string fileName){using (DevExpress.Utils.WaitDialogForm dlg = new DevExpress.Utils.WaitDialogForm("请稍等", "保存中...", new Size(100, 50))){try{GridControl grid = new GridControl();grid.BindingContext = new BindingContext();//绑定内容实例,否则需要在界面显示才会自动实例GridView view = new GridView(grid);grid.MainView = view;grid.DataSource = dt;grid.ForceInitialize();//强制初始化grid.ExportToXlsx(fileName);if(DialogResult.Yes== XtraMessageBox.Show("导出成功,是否打开文件","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Information))System.Diagnostics.Process.Start(fileName);}catch(Exception ex){XtraMessageBox.Show("导出失败:" + ex.Message);}}}void MethodTest(){DataTable dt = new DataTable();dt.Columns.Add("Name");dt.Rows.Add("涛神厉害");dt.Rows.Add("涛神牛逼");ExportByGridControl(dt, "E:\\涛神.xlsx");}
这篇关于DevExpress 利用动态创建GridControl导出Excel,并不显示在界面上的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!