1.关于后台返回了文件流但是前台并没有跳出文件下载的提示;
解:因为后台使用了一般处理程序,刚开始使用了post请求的方式,并没有半毛钱的作用。所以后来选择了在js里直接用href跳转的方式
function outexcel() { //因为列表使用了多选框所以这里要对勾选的记录进行判断 var rows = $('#tab_list').datagrid('getSelections'); if (rows != "") { var result = ""; for (var i = 0; i < rows.length; i++) { if (result == "") { result = rows[i].Id; } else result = result + "," + rows[i].Id; } window.location.href = "XXXX.ashx?type=outexcel&Id=" + result; } else { msgShow('提示', '请选择要导出的报文', 'error'); }
2、导出时主要用了一个网上找来的类
/// <summary> /// 导出Excel文件,并自定义文件名 /// </summary> public static void DataTable3Excel(System.Data.DataTable dtData, String FileName) { GridView dgExport = null; HttpContext curContext = HttpContext.Current; StringWriter strWriter = null; HtmlTextWriter htmlWriter = null; if (dtData != null) { //HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8);这句在使用的时候出现了部分乱码,由于我是使用了网页所以改成如下这句
HttpContext.Current.Response.Write("<meta http-equiv=Content-Type; content=text/html;charset=utf-8>"); curContext.Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls"); curContext.Response.ContentType = "application nd.ms-excel"; curContext.Response.ContentEncoding = System.Text.Encoding.UTF8; curContext.Response.Charset = "GB2312"; strWriter = new StringWriter(); htmlWriter = new HtmlTextWriter(strWriter); dgExport = new GridView(); dgExport.DataSource = dtData.DefaultView; dgExport.AllowPaging = false; dgExport.DataBind(); dgExport.RenderControl(htmlWriter); curContext.Response.Write(strWriter.ToString()); curContext.Response.End(); } }
3、对于mysql导出excel时增加序号一列
select @rownum:=@rownum+1 as rownum, 字段1,字段2 from XXX表 ,(select @rownum:=0) as it where 。。。。条件
切记(select @rownum:=0) as it一定是跟XXX表放一起的,千万不要放到where 后面去了。
这句话在mysql客户端用的好好的,结果在自己的程序里就爆了个错误。于是找了另一个方法直接在dataTable的前面加一列序号
/// <summary> /// 将dt增加一列序号 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static DataTable AddCol(DataTable dt) { DataTable dtR; //返回值 DataColumn dtNewCol = new DataColumn("序号", typeof(string)); //创建ID列 dt.Columns.Add(dtNewCol); dt.Columns["序号"].SetOrdinal(0); dtR = dt; int dtc = dtR.Rows.Count; //dtc 行数 for (int i = 0; i < dtc; i++) { dtR.Rows[i]["序号"] = (i + 1).ToString(); } return dtR; }