动态选择导出Excel字段

1.获取数据,自动生成字段,绑定CheckBoxList

DAL

/// <summary>
        /// 获取学生导出信息
        /// </summary>
        /// <param name="strWhere"></param>
        /// <returns></returns>
        public DataSet sao_p_GetStudent_DKSQ_print(string strWhere)
        {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("SELECT e.xh as 学号,d.xs_name as 姓名,e.rxnf as 入学年份,pycc.pycc_name as 培养层次,zyxy.xy_name as 专业学院,");
            strSql.Append(" zsxy.xy_name as 住宿书院,zy.zy_name as 专业,e.zynd_no as 年级,e.ldap_id+'@stu.edu.cn' as 邮箱,");
            strSql.Append(" d.xb as 性别,lxdz_sf+lxdz_cs+lxdz_xq+lxdz as 地址,");
            strSql.Append(" grlxfs as 个人联系方式,jg as 籍贯,sfzh_id as 身份证,");
            strSql.Append(" csrq_str as 出生日期,zzmm as 政治面貌,mz as 民族,sfzh_id as 身份证号,e.vid ,e.ldap_id as 校园账号,");
            strSql.Append(" d.yzbm as 邮政编码,lxr as 联系人,d.lxdh as 联系电话,e.byxx as 毕业学校,");
            strSql.Append(" A.xn_key1 as 贷款学年1,A.xfzsf1 as 申请学费住宿费1,A.shf1 as 申请生活费1,");
            strSql.Append(" A.xn_key2 as 贷款学年2,A.xfzsf2 as 申请学费住宿费2,A.shf2 as 申请生活费2,");
            strSql.Append(" A.xn_key3 as 贷款学年3,A.xfzsf3 as 申请学费住宿费3,A.shf3 as 申请生活费3,");
            strSql.Append(" A.xn_key4 as 贷款学年4,A.xfzsf4 as 申请学费住宿费4,A.shf4 as 申请生活费4,");
            strSql.Append(" A.xn_key5 as 贷款学年5,A.xfzsf5 as 申请学费住宿费5,A.shf5 as 申请生活费5,");
            strSql.Append(" A.hdkzh as 还款帐户,dkqx_ks as 贷款期限开始,dkqx_js as 贷款期限结束,");
            strSql.Append(" sqrdh as 申请人电话,jtrks as 家庭人口,rjsr as 家庭人均月收入,jtlxr as 联系人姓名,lxr_gx as 联系人关系,gzdw as 联系人工作单位,");
            strSql.Append(" B.lxdh as 联系人电话,fqxm as 父亲姓名,fqsfzh as 父亲身份证号码,fqgzdw as 父亲工作单位,fqysr as 父亲月收入,fqlxdh as 父亲联系电话,");
            strSql.Append(" mqxm as 母亲姓名,mqsfzh as 母亲身份证号码,mqgzdw as 母亲工作单位,mqysr as 母亲月收入,mqlxdh as 母亲联系电话,");
            strSql.Append(" c.yhshrq as 学院审核日期,case A.zt_flg when 0 then '填表中' when 1 then '待学院审核'");
            strSql.Append(" when 2 then '待学校审核' when 3 then '待银行审核'  when 4 then '审核通过'");
            strSql.Append(" when 5 then '审核不通过' ");
            strSql.Append(" end as 审核状态,CONVERT(char(10), hzdyrq, 20) as 打印时间");
            strSql.Append(" FROM dkb_dksqb A");
            strSql.Append(" INNER JOIN dkb_dksqjb B ON A.dksq_key=B.dksq_key ");
            strSql.Append(" INNER JOIN dkb_dksqsh c ON A.dksq_key=c.dksq_key");
            strSql.Append(" INNER JOIN dkb_dkht on a.vid=dkb_dkht.vid");
            strSql.Append(" INNER JOIN dkb_dkhtje ON dkb_dkht.dkht_key=dkb_dkhtje.dkht_key ");
            strSql.Append(" inner join xsb_grxx d on a.vid=d.vid");
            strSql.Append(" inner join xsb_rxjbxx e on a.vid=e.vid");
            strSql.Append(" left join dmb_pycc pycc on e.pycc_key=pycc.pycc_key");
            strSql.Append(" left join dmb_xy zyxy on e.zyxy_key=zyxy.xy_key");
            strSql.Append(" left join dmb_xy glxy on e.glxy_key=glxy.xy_key");
            strSql.Append(" left join dmb_xy zsxy on e.zsxy_key=zsxy.xy_key");
            strSql.Append(" left join dmb_zy zy on b.zy_key=zy.zy_key");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }

            return DbHelperSQL_SAO.Query(strSql.ToString());
        }

HTML

<asp:CheckBoxList ID="cblCol" runat="server" RepeatColumns="6" RepeatDirection="Horizontal" CssClass="tbCbl"></asp:CheckBoxList>

.cs文件

        private void BindData()
        {
            DAL_SAO_NEW_ZXDK.Controller.dkb_dksqb C_dkb_dksqb = new DAL_SAO_NEW_ZXDK.Controller.dkb_dksqb();
            DataTable dt = C_dkb_dksqb.sao_p_GetStudent_DKSQ_print(where).Tables[0];

            ViewState["XsxxExport"] = dt;


            cblCol.Items.Clear(); //清空选项

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                cblCol.Items.Add(new ListItem(dt.Columns[i].ColumnName));
            }

            cblCol.Items.FindByText("姓名").Selected = true;
            cblCol.Items.FindByText("性别").Selected = true;
            cblCol.Items.FindByText("学号").Selected = true;
            cblCol.Items.FindByText("专业学院").Selected = true;
            cblCol.Items.FindByText("专业").Selected = true;
            cblCol.Items.FindByText("年级").Selected = true;
            cblCol.Items.FindByText("身份证号").Selected = true;
        }

2.遍历CheckBoxList,去除DataTable中未选中的字段,绑定GridView,导出Excel

HTML

<asp:GridView ID="gvwXsxxExport" runat="server" Visible="false"></asp:GridView>
<asp:Label ID="lb_total_xsxx" runat="server" Text="0" Visible="false"></asp:Label>
    

.cs文件

        /// <summary>
        /// 导出学生信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnXsxxExport_Click(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)ViewState["XsxxExport"];
            for (int i = 0; i < cblCol.Items.Count; i++)
            {
                if (cblCol.Items[i].Selected == false)
                {
                    //去除未选中字段
                    dt.Columns.Remove(cblCol.Items[i].Text);
                }
            }
            if (dt.Columns.Count < 1)
            {
                Common_SAO_NEW.Tools.ShowAlert("请选中要导出的列!");
                return;
            }
            gvwXsxxExport.DataSource = dt;
            gvwXsxxExport.DataBind();
            foreach (GridViewRow x in gvwXsxxExport.Rows)
            {
                for (int i = 0; i < x.Cells.Count; i++)
                {
                    //设置单元格样式,防止出现科学计数法问题
                    x.Cells[i].Attributes.Add("style", "vnd.ms-excel.numberformat:@");
                }
            }

            lb_total_xsxx.Text = "总计-" + gvwXsxxExport.Rows.Count.ToString() + "-项"; 

            if (gvwXsxxExport.Rows.Count > 0)
            {
                gvwXsxxExport.Visible = true;
                lb_total_xsxx.Visible = true;
                string ExcelFile = "XSDKXX_" + System.DateTime.Now.ToString("yyyyMMddHHmmss");
                string header = @"<table><tr><td colspan=" + dt.Columns.Count + "><center><b><font size='3'>学生申请贷款信息</font></b></center></td></tr>"
                    + "<tr><td colspan=" + (dt.Columns.Count - 1) + "></td><td>导出时间:" + DateTime.Now.ToShortDateString() + "</td></tr></table>";
                string bottomer = "";
                Common_SAO_NEW.Tools.OutputExcel(gvwXsxxExport, ExcelFile, header, bottomer, lb_total_xsxx);
                gvwXsxxExport.Visible = false;
                lb_total_xsxx.Visible = false;
            }
            else
            {
                Common_SAO_NEW.Tools.ShowAlert("暂无可供导出信息!");
                return;
            }
        }

 

 

 

 

操作DataTable

DataTable dt = new DataTable("tt");
dt.Columns.Add("cc1");
dt.Columns.Add("cc2");
dt.Columns.Add("cc3");
dt.Rows.Add("r1","r1","r1");
dt.Rows.Add("r1", "r1", "r1");
dt.Rows.Add("r1", "r1", "r1");
dt.Rows.Add("r1", "r1", "r1");
DataSet ds = new DataSet();
ds.Tables.Add(dt);//添加到ds中,以便和你的情况一致,排除ds的影响
 
DataTable dt2 = ds.Tables["tt"];//重新获取tt
dt2.Columns.Remove("cc2");//删除列
 
int s = dt2.Columns.Count;//结果是2,删除成功
Response.Write(s);

 

posted @ 2015-08-10 16:14  linyongqin  阅读(1058)  评论(0)    收藏  举报