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


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值