DataTable 更改在有数据列的类型方法+DataTable 导出excel功能
/// <summary>
/// 导出功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btn_export_Click(object sender, EventArgs e)
{
try
{
string strSql = CreateStrWhere();
DataTable dst = ShDonBLL.GetListForEXport(strSql).Tables[];
if (dst.Rows.Count<=)
{
Jscript.Alert(this, "查询数据为空,没有数据导出,请重新选择条件!");
return;
}
DataTable ds = UpdateDataTable(dst);
for (int i = ; i < ds.Rows.Count; i++)
{
DataColumn dc = ds.Columns[];//i就是第几列或者用列名也可以
dc.DataType = typeof(String);
string eid = ds.Rows[i]["装置名称"].ToString();
string tyid = ds.Rows[i]["类别"].ToString();
if (!string.IsNullOrEmpty(eid))
{
ds.Rows[i]["装置名称"] = GetEqui(eid);
}
if (!string.IsNullOrEmpty(tyid))
{
ds.Rows[i]["类别"] = GetZG(tyid);
}
}
//DataTableExcel(ds,"测试0",""); }
catch (Exception ex)
{ throw ex;
}
}
/// <summary>
/// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改记录值,4.返回希望的结果)
/// </summary>
/// <param name="argDataTable">数据表DataTable</param>
/// <returns>数据表DataTable</returns> private DataTable UpdateDataTable(DataTable argDataTable)
{
DataTable dtResult = new DataTable();
//克隆表结构
dtResult = argDataTable.Clone();
foreach (DataColumn col in dtResult.Columns)
{
if (col.ColumnName == "装置名称" || col.ColumnName == "类别")
{
//修改列类型
col.DataType = typeof(String);
}
}
foreach (DataRow row in argDataTable.Rows)
{
DataRow rowNew = dtResult.NewRow();
rowNew["序号"] = row["序号"];
rowNew["装置名称"] = row["装置名称"];
rowNew["停工时间"] = row["停工时间"];
rowNew["开工时间"] = row["开工时间"];
rowNew["正常时间"] = row["正常时间"];
rowNew["停工原因"] = row["停工原因"];
rowNew["类别"] = row["类别"];
rowNew["停工时间小时"] = row["停工时间小时"];
rowNew["年度"] = row["年度"];
dtResult.Rows.Add(rowNew);
}
return dtResult;
} #region DataTable导出到Excel
/// <summary>
/// DataTable导出到Excel
/// </summary>
/// <param name="pData">DataTable</param>
/// <param name="pFileName">导出文件名</param>
/// <param name="pHeader">导出标题以|分割</param>
public static void DataTableExcel(System.Data.DataTable pData, string pFileName, string pHeader)
{
System.Web.UI.WebControls.DataGrid dgExport = null;
// 当前对话
System.Web.HttpContext curContext = System.Web.HttpContext.Current;
// IO用于导出并返回excel文件
System.IO.StringWriter strWriter = null;
System.Web.UI.HtmlTextWriter htmlWriter = null;
if (pData != null)
{
string UserAgent = curContext.Request.ServerVariables["http_user_agent"].ToLower();
if (UserAgent.IndexOf("firefox") == -)//火狐浏览器
pFileName = HttpUtility.UrlEncode(pFileName, System.Text.Encoding.UTF8);
curContext.Response.AddHeader("Content-Disposition", "attachment; filename=" + pFileName + ".xls");
curContext.Response.ContentType = "application/vnd.ms-excel";
strWriter = new System.IO.StringWriter();
htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
// 为了解决dgData中可能进行了分页的情况,需要重新定义一个无分页的DataGrid
dgExport = new System.Web.UI.WebControls.DataGrid();
dgExport.DataSource = pData.DefaultView;
dgExport.AllowPaging = false;
dgExport.ShowHeader = true;//显示标题
dgExport.DataBind();
string[] arrHeader = pHeader.Split('|');
string strHeader = "<table border=\"1\" style=\"background-color:Gray;font-weight:bold;\"><tr>";
foreach (string j in arrHeader)
{
strHeader += "<td>" + j.ToString() + "</td>";
}
strHeader += "</tr></table>";
// 返回客户端
dgExport.RenderControl(htmlWriter);
string strMeta = "<meta http-equiv=\"content-type\" content=\"application/ms-excel; charset=UTF-8\"/>";
curContext.Response.Write(strMeta + strHeader + strWriter.ToString());
curContext.Response.End();
}
}
DataTable 更改在有数据列的类型方法+DataTable 导出excel功能的更多相关文章
- DataTable 更改在有数据列的类型方法
原文:DataTable 更改在有数据列的类型方法 /// <summary> /// 修改数据表DataTable某一列的类型和记录值(正确步骤:1.克隆表结构,2.修改列类型,3.修改 ...
- 【转载】C#如何往DataTable中新增一个数据列
在C#中的Datatable数据变量的操作过程中,有时候我们需要往现有的DataTable中新增一个自定义数据列,该列在原有的DataTable变量中并不存在,属于用户手工自定义新增的数据列,在往Da ...
- SQL点滴4—筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息
原文:SQL点滴4-筛选数据列的类型,字段大小,是否可为空,是否是主键,约束等等信息 项目需要将Access数据库中的数据导入到SQL Server中,需要检验导入后的数据完整性,数据值是否正确.我们 ...
- 项目笔记:导出Excel功能分sheet页插入数据
导出Excel功能分sheet页处理数据: /*导出EXCEL*/ public void createExcel() { log.info("导出Excel功能已经启动-BEGIN&quo ...
- vue将指定区域的表格数据或element-ui中el-table的数据单笔或多笔批量导出excel
公司在后台管理系统开发中用到了 vue+element-ui 组合的框架,但随着需求的越来越复杂,前端的工作难度也呈几何倍数递增,工作量随之增大.这不,在项目中增加一个将列表数据导出为excel的需求 ...
- springboot实现数据库中数据导出Excel功能
[转载]原文地址:https://blog.csdn.net/wilson_m/article/details/79021458 功能介绍 网上查找了一堆的数据导出代码,可能是自己基础比较薄弱的原因还 ...
- 项目笔记:导出Excel功能设置导出数据样式
/** * 导出-新导出 * * @return * @throws IOException */ @OperateLogAnn(type = OperateEnum.EXPORT, hibInter ...
- 线程系列07,使用lock语句块或Interlocked类型方法保证自增变量的数据同步
假设多个线程共享一个静态变量,如果让每个线程都执行相同的方法每次让静态变量自增1,这样的做法线程安全吗?能保证自增变量数据同步吗?本篇体验使用lock语句块和Interlocked类型方法保证自增变量 ...
- C# 使用Epplus导出Excel [2]:导出动态列数据
C# 使用Epplus导出Excel [1]:导出固定列数据 C# 使用Epplus导出Excel [2]:导出动态列数据 C# 使用Epplus导出Excel [3]:合并列连续相同数据 C# 使用 ...
随机推荐
- C常用数据类型长度
1.整型数据类型 2.无符号整型数据类型 3.字符型数据类型 char 字节数 1: 4.浮点型数据类型
- 使用Process类重定向输出与错误时遇到的问题 (转)
程序中要调用外部程序cmd.exe执行一些命令行,并取得屏幕输出,使用了Process类,基本代码如下: Process process = new Process(); process.StartI ...
- Orleans的单线程执行模型
Orleans在默认情况下只创建一个grain的实例,并以单线程模型执行.如果同一个grain实例,在Orleans存在多个实例,就会产生并发冲突,单线程执行模型就可以完全避免并发冲突了. 但在特殊场 ...
- Dynamic CRM 2013学习笔记(七)追踪、监控及性能优化
本文将介绍CRM的三个内容追踪.监控及性能优化.追踪是CRM里一个很有用的功能,它能为我们的CRM调试或解决错误.警告提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状况:最后 ...
- C#过滤Html标签及空格
public static string FilterHTML(string HTMLStr) { if (!string.IsNullOrEmpty(HTMLStr)) return System. ...
- Designing a Secure REST (Web) API without OAuth
原文:http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ Situation Y ...
- tomcat安全配置
1. 注释或删除 tomcat-users.xml 所有用户权限,看上去如下: <tomcat-users></tomcat-users> 2. 隐藏tomcat版本信息 1 ...
- Marbles启动信息
body-parser deprecated undefined extended: provide extended option app.js:40:20 -------------------- ...
- Javascript之document对象用法(很重要)
一.找到元素 document.getElementById("id"):根据id找层,最多找一个 var a=document.getElementById("id&q ...
- SQL中order by;group up;like;关联查询join on的用法
排序order by的用法: 1.order by 字段名1 asc/desc, 字段名2 asc/desc,... 先按照字段名1的升序/降续给表进行排列 然后 按照字段名2的升序/降续给表进行排列 ...