今天写一个导出到Excel表的东西,之前也写过,以前导出都是将界面上的DataGridView中数据导出,没有任何问题,然而今天的导出场景是在界面是点击导出按钮,直接在数据库中查询符合条件的数据导出,不须要显示在界面上。数据库
本文如有出入,请指正——来自小渣渣的颤抖
客官可移步小站查看本文http://fanjiajia.cn/2019/07/08/Cplusplus/flx1/this
直接看解决
便可debug
由于项目中有公用的导出方法,只须要传递一个DataGridView参数便可,因此确定是将查出来的DataTable转成一个DataGridView,之前都是直接在WinForm中拖,如今确定是直接new一个。code
// 新建一个DataGridView对象 DataGridView dgv = new DataGridView(); // 添加列 DataGridViewTextBoxColumn col_HTBH = new DataGridViewTextBoxColumn(); col_HTBH.Name = "ZXHTBH"; col_HTBH.DataPropertyName = "ZXHTBH"; col_HTBH.HeaderText = "合同编号"; dgv.Columns.Add(col_HTBH); ...... // 查询导出数据 DataTable dt = BLL.YardSystem.DC.QueryQKHWXX(); // 为dgv设置数据源 dgv.DataSource = dt; // 导出数据 .......
按照上面的逻辑,new的dgv,添加的列设置了列名称,列的DataPropertyName
,设置了该属性就能实现DataTable中对应的列匹配上。orm
作好了上面的工做,第一次运行,导出成功后,查看Excel表,没有数据,除了每一列的名称,debug,DataTable确实有数据,dgv的DataSource也有数据,然而却发现它的RowsCount为0,What。RowsCount为0。对象
一通捣腾,有人说绑定了可是没有填充,也有人说循环为一行赋值,一看就以为low,最后看到一个哥们说把dgv添加到Controls里面,当时我还郁闷,我又不须要他显示,加进去干啥,然而就是这个不知道干啥起做用了。get
this.Controls.Add(dgv);
Perfect,搞定,也不知道为何,就是须要作这样一个操做。class
此致,敬礼循环