zoukankan      html  css  js  c++  java
  • 根据高级查询导出excel

    protected void ImageButton7_Click(object sender, ImageClickEventArgs e)
            {
                string D_where = string.Empty;
                if (string.IsNullOrEmpty(txtStart.Value) == false)
                {
                    D_where += " and to_char(S_IN_DATE,'yyyy-mm-dd')>='" + txtStart.Value + "'";
                }
                if (string.IsNullOrEmpty(txtEnd.Value) == false)
                {
                    D_where += " and to_char(S_IN_DATE,'yyyy-mm-dd')<='" + txtEnd.Value + "'";
                }
                if (DropDownList1.SelectedValue != "0000" && DropDownList1.SelectedValue != "")
                {
                    D_where += " and F_SALEOUT_O='" + DropDownList1.Items[DropDownList1.SelectedIndex].Text + "'";
                }
                if (DropDownList2.SelectedValue != "0000" && DropDownList2.SelectedValue != "")
                {
                    D_where += " and F_SALEOUT_T='" + DropDownList2.Items[DropDownList2.SelectedIndex].Text + "'";
    
                }
    
    
                string sql = @"select XS_DATE 销售日期,F_ORDERID 服务单号,G_NAME 被保人姓名,G_CARDNO 被保人身份证号,F_ENSURE 被保金额,F_SERVICE 服务费用,MEDICAL_COST 医疗成本,case when (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000)>0 then (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000) else 0 end  合作推广费用小,(1 - (1 / (F_ENSURE / 3000))) * ((F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100))) + 200 合作推广费用大,((1 - (1 / (F_ENSURE / 3000))) * ((F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100))) + 200)-(case when (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000)>0 then (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000) else 0 end) 差价
      FROM ACCEPTANCE A, U_PROFIT U, Y_ORDERS O,MEDICALTYPE M
     WHERE A.U_PROFIT_ID = U.ID AND O.ID = A.ORDER_ID and O.f_saleout_stype=m.medical_id and  S_STUSES in (2) " + D_where + "";
                DataTable dt = DBUtility.DBHelper.GetDataTable(sql);
    
                string sql2 = @"select  sum(F_ENSURE) a,sum(F_SERVICE) b,sum(case when (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000)>0 then (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000) else 0 end) c,sum((1 - (1 / (F_ENSURE / 3000))) * ((F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100))) + 200) d,sum(((1 - (1 / (F_ENSURE / 3000))) * ((F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100))) + 200)-(case when (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000)>0 then (F_SERVICE * 0.942) - (F_ENSURE * (MEDICAL_COST / 100)) - 400 - ((F_ENSURE * 60) / 3000) else 0 end)) e
      FROM ACCEPTANCE A, U_PROFIT U, Y_ORDERS O,MEDICALTYPE M
     WHERE A.U_PROFIT_ID = U.ID AND O.ID = A.ORDER_ID and O.f_saleout_stype=m.medical_id and  S_STUSES in (2) " + D_where + "";
                DataTable num = DBUtility.DBHelper.GetDataTable(sql2);
    
                DataRow dr = dt.NewRow();
                dr[dt.Columns.Count - 9] = "合计(¥):";
                dr[dt.Columns.Count - 6] = num.Rows[0]["a"].ToString();
                dr[dt.Columns.Count - 5] = num.Rows[0]["b"].ToString();
                dr[dt.Columns.Count - 3] = num.Rows[0]["c"].ToString();
                dr[dt.Columns.Count - 2] = num.Rows[0]["d"].ToString();
                dr[dt.Columns.Count - 1] = num.Rows[0]["e"].ToString();
                dt.Rows.Add(dr);
    
                ExcelImport(dt, @"HZFYTGDZDExl");
               
    
              
            }
            private StringWriter GetStringWriter(DataTable dt)
            {
                StringWriter sw = new StringWriter();
                //读列名   
                foreach (DataColumn dc in dt.Columns)
                    sw.Write(dc.ColumnName + "	");
    
                //读列值   
                //重新的一行   
                sw.Write(sw.NewLine);
                if (dt != null)
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            sw.Write(dr[i].ToString() + "	");
                        }
                        sw.Write(sw.NewLine);
                    }
                }
                sw.Close();
    
                return sw;
            }
    
            protected void ExcelImport(DataTable dt, string ExportFileName)
            {
                StringWriter sw = GetStringWriter(dt);
                //当前编码   
                HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
                //把输出的文件名进行编码   
                string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);
                //文件名   
                string str = "attachment;filename=" + fileName + ".xls";
                //  sw.ContentType = "application/vnd.ms-excel";
                //把文件头输出,此文件头激活文件下载框   
                HttpContext.Current.Response.AppendHeader("Content-Disposition", str);//http报头文件   
                HttpContext.Current.Response.ContentType = "application/ms-excel";
                this.Page.EnableViewState = false;
    
                Response.Write(sw);
                Response.End();
            }
    View Code

    DataTable.NewRow()用来创建一个新的Row,为什么还要加回自己dt.Rows.Add()?

    2014-08-27 20:08
    既然DataRow类型本身的构造函数是不可public访问的,因此必须得像下面这样来创建一个DataRow:
    DataTable dt = new DataTable("t1");
    DataRow dr = dt.NewRow();
    dt.Rows.Add(dr);
    
  • 相关阅读:
    es6 可迭代对象
    前端模板
    快速排序
    parseHTML2Vnode
    最大并发请求
    选择排序
    window命令
    Asp.net问题集锦
    ExtJs5.1.1使用中问题集锦
    Sql Server问题集锦
  • 原文地址:https://www.cnblogs.com/110abcd/p/4627640.html
Copyright © 2011-2022 走看看