可以,点击按扭后再次按条件查询,然后直接导出数据集:
public static void CreateExcelForHtml(DataSet ds, string FileName, FineUI.Grid grid)//将DataSet中的数据导出Execl For Html 格式
{
//把DataSet中的数据导出,也就是把DataSet中的表中的各行信息,以ms-excel的格式Response到http流,
//说明:参数ds应为填充有数据表的DataSet,文件名是全名,包括后缀名,如execl2006.xls
HttpResponse resp;
resp = HttpContext.Current.Response;//HttpContext.Current.
resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
resp.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);
resp.ContentType = "application/excel";
string colHeaders = "", ls_item = "",F,C;
StringBuilder sb = new StringBuilder();
sb.Append("<table cellspacing=\"0\" rules=\"all\" border=\"1\" style=\"border-collapse:collapse;\">");
sb.Append("<tr>");
DataTable dt = ds.Tables[0];//
DataRow[] myRow = dt.Select();//
int i = 0;
int cl = dt.Columns.Count;
for (i = 0; i < cl; i++)//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
{
colHeaders = dt.Columns[i].Caption.ToString();
colHeaders = ReturnCaption(colHeaders, grid);//根据字段名返回中文名称
sb.AppendFormat("<td>{0}</td>", colHeaders);
}
sb.Append("</tr>");
for (i = 0; i < cl; i++)//取得数据表各列标题,各标题之间以t分割,最后一个列标题后加回车符
{
colHeaders = dt.Columns[i].Caption.ToString();
//colHeaders = ReturnCaption(colHeaders, grid);//根据字段名返回中文名称
sb.AppendFormat("<td>{0}</td>", colHeaders);
}
sb.Append("</tr>");
foreach (DataRow row in myRow)//逐行处理数据
{
sb.Append("<tr>");
for (i = 0; i < cl; i++)//当前行数据写入HTTP输出流,并且置空ls_item以便下行数据
{
ls_item = row[i].ToString().Trim();
F = dt.Columns[i].Caption.ToString().ToLower();
C = ReturnCaption(F, grid);//根据字段名返回中文名称
if (F == "cardnumber" || F == "autoid" || F == "nodenumber" || F == "parentnodenumber"||C.IndexOf("号")>=0) //如果为数值字段
{
sb.AppendFormat("<td style='mso-number-format:\"\\@\";'>{0}</td>", ls_item);
}
else sb.AppendFormat("<td>{0}</td>", ls_item);
}
sb.Append("</tr>");
}
sb.Append("</table>");
resp.Write(sb.ToString());//向HTTP输出流中写入取得的数据信息
resp.End();
}
|