前台datagrid数据绑定
#region 导出到excel中
///
<summary>
/// 2014-6-6
///
</summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>
protected void lnkbtnExcel_Click(object sender, EventArgs
e)//导出Excel按钮点击事件
{
DataSet ds = new
DataSet();
DataTable dt = new
DataTable("tblExXuQiu");
ds.Tables.Add(dt);
//dgResEleList dataGrid控件
//导出的excel的标题
dt.Columns.Add(new
DataColumn("序列号",
System.Type.GetType("System.String")));//序列号
dt.Columns.Add(new DataColumn("区县局",
System.Type.GetType("System.String")));//区县局
dt.Columns.Add(new DataColumn("2013任务", System.Type.GetType("
System.String")));//2013任务
dt.Columns.Add(new DataColumn("已改造", System.Type.GetType("
System.String")));//已改造
dt.Columns.Add(new DataColumn("已更新", System.Type.GetType("
System.String")));//已更新
dt.Columns.Add(new DataColumn("已完成小计", System.Type.GetType("
System.String")));//已完成小计
dt.Columns.Add(new DataColumn("未完成小计", System.Type.GetType("
System.String")));//未完成小计
if
(dgResEleList.Items.Count == 0)
{
JSUAlter.Alert(this.Page, "没有数据
无法导出");
return;
}
else
{
for (int
i = 0; i < dgResEleList2013.Items.Count;
i++)
{
DataRow dr =
dt.NewRow();
if (dgResEleList2013.Items[i].ItemType == ListItemType.Item ||
dgResEleList2013.Items[i].ItemType == ListItemType.AlternatingItem ||
dgResEleList2013.Items[i].ItemType ==
ListItemType.SelectedItem)
{
//前台使用绑定数据
//后台取值
dr["序列号"] = (dgResEleList2013.Items[i].Cells[0].FindControl("SeqLB1") as Label).Text.Trim();
//前台使用<asp:BoundColumn DataField="int2013"
HeaderText="2013任务"></asp:BoundColumn>绑定数据
dr["区县局"] = dgResEleList2013.Items[i].Cells[1].Text.Trim();
dr["2013任务"] =
dgResEleList2013.Items[i].Cells[2].Text.Trim();
dr["已改造"] = (dgResEleList2013.Items[i].Cells[3].FindControl("intGZ1") as
Label).Text.Trim();
dr["已更新"] = (dgResEleList2013.Items[i].Cells[4].FindControl("intGX1") as
Label).Text.Trim();
dr["已完成小计"] = (dgResEleList2013.Items[i].Cells[5].FindControl("intFTotal1") as
Label).Text.Trim();
dr["未完成小计"] = (dgResEleList2013.Items[i].Cells[6].FindControl("intUTotal1") as
Label).Text.Trim();
dt.Rows.Add(dr);
}
}
//调用ExcelHelper类 传入参数 数据源
excel名称
ExcelHelper.DataTable3Excel(ds.Tables[0], "Excel" +
DateTime.Now.ToString("yyyy-MM-dd"));
}
}
#endregion
ExcelHelper类
/// <summary>
/// 类说明:Assistant
/// 编 码 人:
/// 联系方式:
///
更新网站:
/// </summary>
using System;
using System.IO;
using
System.Data;
using System.Collections;
using System.Data.OleDb;
using
System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using
Wsl.WorkFrame;
/// <summary>
/// Excel操作类
/// </summary>
///
Microsoft Excel 11.0 Object Library
public class ExcelHelper :
SqlDaoObject
{
#region
数据导出至Excel文件
/// </summary>
/// 导出Excel文件,自动返回可下载的文件流
/// </summary>
public static void DataTable1Excel(System.Data.DataTable
dtData)
{
GridView gvExport = null;
HttpContext curContext =
HttpContext.Current;
StringWriter
strWriter = null;
HtmlTextWriter
htmlWriter = null;
if (dtData !=
null)
{
curContext.Response.ContentType =
"application/vnd.ms-excel";
curContext.Response.Charset =
"utf-8";
curContext.Response.ContentEncoding =
System.Text.Encoding.GetEncoding("gb2312");
strWriter
= new
StringWriter();
htmlWriter = new
HtmlTextWriter(strWriter);
gvExport = new
GridView();
gvExport.DataSource =
dtData.DefaultView;
gvExport.AllowPaging =
false;
gvExport.DataBind();
gvExport.RenderControl(htmlWriter);
curContext.Response.Write("<meta http-equiv=\"Content-Type\"
content=\"text/html;charset=gb2312\"/>" +
strWriter.ToString());
curContext.Response.End();
}
}
#region 导出Excel文件,转换为可读模式
///
<summary>
///
导出Excel文件,转换为可读模式
///
</summary>
public static void
DataTable2Excel(System.Data.DataTable dtData)
{
DataGrid dgExport =
null;
HttpContext curContext =
HttpContext.Current;
StringWriter
strWriter = null;
HtmlTextWriter
htmlWriter = null;
if (dtData !=
null)
{
curContext.Response.ContentType =
"application/vnd.ms-excel";
curContext.Response.ContentEncoding =
System.Text.Encoding.UTF8;
curContext.Response.Charset =
"";
strWriter = new
StringWriter();
htmlWriter = new
HtmlTextWriter(strWriter);
dgExport = new
DataGrid();
dgExport.DataSource =
dtData.DefaultView;
dgExport.AllowPaging =
false;
dgExport.DataBind();
dgExport.RenderControl(htmlWriter);
curContext.Response.Write(strWriter.ToString());
curContext.Response.End();
}
}
#endregion
#region 导出Excel文件,并自定义文件名
///
<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)
{
curContext.Response.Clear();
HttpUtility.UrlEncode(FileName,
System.Text.Encoding.UTF8);
//Response.AppendHeader("content-disposition", "attachment;filename=\"" +
System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) +
".xls\"");
curContext.Response.AddHeader("content-disposition", "attachment;filename=\"" +
System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) +
".xls\"");
curContext.Response.ContentType =
"application/ms-excel";
curContext.Response.Charset =
"GB2312";
//
curContext.Response.ContentEncoding =
System.Text.Encoding.UTF8;
curContext.Response.ContentEncoding =
System.Text.Encoding.GetEncoding("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("<meta http-equiv=\"content-type\"
content=\"application/ms-excel; charset=gb2312\"/>"
+strWriter.ToString());
curContext.Response.End();
//curContext.ApplicationInstance.CompleteRequest();
}
}
#endregion
#region 导出Excel文件,并自定义文件名 record
/// <summary>
/// 导出Excel文件,并自定义文件名 record
/// </summary>
public static
void DataTableRecExcel(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);
//Response.AppendHeader("content-disposition", "attachment;filename=\"" +
System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) +
".xls\"");
curContext.Response.AddHeader("content-disposition", "attachment;filename=\"" +
System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) +
".xls\"");
curContext.Response.ContentType =
"application/ms-excel";
curContext.Response.Charset =
"GB2312";
curContext.Response.ContentEncoding =
System.Text.Encoding.UTF8;
//curContext.Response.ContentEncoding =
System.Text.Encoding.GetEncoding("UTF8");
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();
}
}
#endregion
#region 将数据导出至Excel文件
///
<summary>
/// 将数据导出至Excel文件
/// </summary>
/// <param
name="Table">DataTable对象</param>
/// <param
name="ExcelFilePath">Excel文件路径</param>
public
static bool OutputToExcel(DataTable Table, string
ExcelFilePath)
{
if
(File.Exists(ExcelFilePath))
{
throw
new Exception("该文件已经存在!");
}
if ((Table.TableName.Trim().Length
== 0) || (Table.TableName.ToLower() ==
"table"))
{
Table.TableName = "Sheet1";
}
//数据表的列数
int ColCount =
Table.Columns.Count;
//用于记数,实例化参数时的序号
int i = 0;
//创建参数
OleDbParameter[] para = new
OleDbParameter[ColCount];
//创建表结构的SQL语句
string
TableStructStr = @"Create Table " + Table.TableName + "(";
//连接字符串
string connString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended
Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(connString);
//创建表结构
OleDbCommand objCmd = new
OleDbCommand();
//数据类型集合
ArrayList DataTypeList =
new ArrayList();
DataTypeList.Add("System.Decimal");
DataTypeList.Add("System.Double");
DataTypeList.Add("System.Int16");
DataTypeList.Add("System.Int32");
DataTypeList.Add("System.Int64");
DataTypeList.Add("System.Single");
//遍历数据表的所有列,用于创建表结构
foreach
(DataColumn col in Table.Columns)
{
//如果列属于数字列,则设置该列的数据类型为double
if (DataTypeList.IndexOf(col.DataType.ToString()) >=
0)
{
para[i] = new OleDbParameter("@" + col.ColumnName,
OleDbType.Double);
objCmd.Parameters.Add(para[i]);
//如果是最后一列
if (i + 1 ==
ColCount)
{
TableStructStr += col.ColumnName + "
double)";
}
else
{
TableStructStr += col.ColumnName + "
double,";
}
}
else
{
para[i] = new OleDbParameter("@" + col.ColumnName,
OleDbType.VarChar);
objCmd.Parameters.Add(para[i]);
//如果是最后一列
if (i + 1 ==
ColCount)
{
TableStructStr += col.ColumnName + "
varchar)";
}
else
{
TableStructStr += col.ColumnName + "
varchar,";
}
}
i++;
}
//创建Excel文件及文件结构
try
{
objCmd.Connection =
objConn;
objCmd.CommandText = TableStructStr;
if
(objConn.State ==
ConnectionState.Closed)
{
objConn.Open();
}
objCmd.ExecuteNonQuery();
}
catch (Exception
exp)
{
throw
exp;
}
//插入记录的SQL语句
string InsertSql_1 =
"Insert into " + Table.TableName + "
(";
string InsertSql_2 = " Values
(";
string InsertSql = "";
//遍历所有列,用于插入记录,在此创建插入记录的SQL语句
for
(int colID = 0; colID < ColCount;
colID++)
{
if
(colID + 1 == ColCount)
//最后一列
{
InsertSql_1 += Table.Columns[colID].ColumnName +
")";
InsertSql_2 += "@" + Table.Columns[colID].ColumnName +
")";
}
else
{
InsertSql_1 += Table.Columns[colID].ColumnName +
",";
InsertSql_2 += "@" + Table.Columns[colID].ColumnName +
",";
}
}
InsertSql = InsertSql_1 + InsertSql_2;
//遍历数据表的所有数据行
for (int rowID = 0;
rowID < Table.Rows.Count;
rowID++)
{
for (int
colID = 0; colID < ColCount;
colID++)
{
if (para[colID].DbType == DbType.Double &&
Table.Rows[rowID][colID].ToString().Trim() ==
"")
{
para[colID].Value =
0;
}
else
{
para[colID].Value =
Table.Rows[rowID][colID].ToString().Trim();
}
}
try
{
objCmd.CommandText =
InsertSql;
objCmd.ExecuteNonQuery();
}
catch
(Exception
exp)
{
string str =
exp.Message;
}
}
try
{
if
(objConn.State ==
ConnectionState.Open)
{
objConn.Close();
}
}
catch (Exception
exp)
{
throw
exp;
}
return
true;
}
#endregion
#region 将数据导出至Excel文件
///
<summary>
/// 将数据导出至Excel文件
/// </summary>
/// <param
name="Table">DataTable对象</param>
/// <param
name="Columns">要导出的数据列集合</param>
/// <param
name="ExcelFilePath">Excel文件路径</param>
public
static bool OutputToExcel(DataTable Table, ArrayList Columns, string
ExcelFilePath)
{
if
(File.Exists(ExcelFilePath))
{
throw
new Exception("该文件已经存在!");
}
//如果数据列数大于表的列数,取数据表的所有列
if
(Columns.Count >
Table.Columns.Count)
{
for (int
s = Table.Columns.Count + 1; s <= Columns.Count;
s++)
{
Columns.RemoveAt(s);
//移除数据表列数后的所有列
}
}
//遍历所有的数据列,如果有数据列的数据类型不是
DataColumn,则将它移除
DataColumn column
= new DataColumn();
for (int j =
0; j < Columns.Count; j++)
{
try
{
column =
(DataColumn)Columns[j];
}
catch
(Exception)
{
Columns.RemoveAt(j);
}
}
if
((Table.TableName.Trim().Length == 0) || (Table.TableName.ToLower() ==
"table"))
{
Table.TableName = "Sheet1";
}
//数据表的列数
int ColCount =
Columns.Count;
//创建参数
OleDbParameter[] para = new
OleDbParameter[ColCount];
//创建表结构的SQL语句
string
TableStructStr = @"Create Table " + Table.TableName + "(";
//连接字符串
string connString =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath + ";Extended
Properties=Excel 8.0;";
OleDbConnection objConn = new OleDbConnection(connString);
//创建表结构
OleDbCommand objCmd = new
OleDbCommand();
//数据类型集合
ArrayList DataTypeList =
new ArrayList();
DataTypeList.Add("System.Decimal");
DataTypeList.Add("System.Double");
DataTypeList.Add("System.Int16");
DataTypeList.Add("System.Int32");
DataTypeList.Add("System.Int64");
DataTypeList.Add("System.Single");
DataColumn col = new DataColumn();
//遍历数据表的所有列,用于创建表结构
for (int k =
0; k < ColCount; k++)
{
col =
(DataColumn)Columns[k];
//列的数据类型是数字型
if (DataTypeList.IndexOf(col.DataType.ToString().Trim()) >=
0)
{
para[k] = new OleDbParameter("@" + col.Caption.Trim(),
OleDbType.Double);
objCmd.Parameters.Add(para[k]);
//如果是最后一列
if (k + 1 ==
ColCount)
{
TableStructStr += col.Caption.Trim() + "
Double)";
}
else
{
TableStructStr += col.Caption.Trim() + "
Double,";
}
}
else
{
para[k] = new OleDbParameter("@" + col.Caption.Trim(),
OleDbType.VarChar);
objCmd.Parameters.Add(para[k]);
//如果是最后一列
if (k + 1 ==
ColCount)
{
TableStructStr += col.Caption.Trim() + "
VarChar)";
}
else
{
TableStructStr += col.Caption.Trim() + "
VarChar,";
}
}
}
//创建Excel文件及文件结构
try
{
objCmd.Connection =
objConn;
objCmd.CommandText = TableStructStr;
if
(objConn.State ==
ConnectionState.Closed)
{
objConn.Open();
}
objCmd.ExecuteNonQuery();
}
catch (Exception
exp)
{
throw
exp;
}
//插入记录的SQL语句
string InsertSql_1 =
"Insert into " + Table.TableName + "
(";
string InsertSql_2 = " Values
(";
string InsertSql = "";
//遍历所有列,用于插入记录,在此创建插入记录的SQL语句
for
(int colID = 0; colID < ColCount;
colID++)
{
if
(colID + 1 == ColCount)
//最后一列
{
InsertSql_1 += Columns[colID].ToString().Trim() +
")";
InsertSql_2 += "@" + Columns[colID].ToString().Trim() +
")";
}
else
{
InsertSql_1 += Columns[colID].ToString().Trim() +
",";
InsertSql_2 += "@" + Columns[colID].ToString().Trim() +
",";
}
}
InsertSql = InsertSql_1 + InsertSql_2;
//遍历数据表的所有数据行
DataColumn DataCol =
new DataColumn();
for (int rowID =
0; rowID < Table.Rows.Count;
rowID++)
{
for (int
colID = 0; colID < ColCount;
colID++)
{
//因为列不连续,所以在取得单元格时不能用行列编号,列需得用列的名称
DataCol =
(DataColumn)Columns[colID];
if (para[colID].DbType == DbType.Double &&
Table.Rows[rowID][DataCol.Caption].ToString().Trim() ==
"")
{
para[colID].Value =
0;
}
else
{
para[colID].Value =
Table.Rows[rowID][DataCol.Caption].ToString().Trim();
}
}
try
{
objCmd.CommandText =
InsertSql;
objCmd.ExecuteNonQuery();
}
catch
(Exception
exp)
{
string str =
exp.Message;
}
}
try
{
if
(objConn.State ==
ConnectionState.Open)
{
objConn.Close();
}
}
catch (Exception
exp)
{
throw
exp;
}
return
true;
}
#endregion
#endregion
/// <summary>
///
获取Excel文件数据表列表
/// </summary>
public static ArrayList GetExcelTables(string
ExcelFileName)
{
DataTable dt = new
DataTable();
ArrayList TablesList
= new ArrayList();
if
(File.Exists(ExcelFileName))
{
using
(OleDbConnection conn = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel
8.0;Data Source=" +
ExcelFileName))
{
try
{
conn.Open();
dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null,
null, "TABLE"
});
}
catch (Exception
exp)
{
throw
exp;
}
//获取数据表个数
int tablecount =
dt.Rows.Count;
for (int i = 0; i < tablecount;
i++)
{
string tablename =
dt.Rows[i][2].ToString().Trim().TrimEnd(‘$‘);
if (TablesList.IndexOf(tablename) <
0)
{
TablesList.Add(tablename);
}
}
}
}
return
TablesList;
}
/// <summary>
///
将Excel文件导出至DataTable(第一行作为表头)
///
</summary>
/// <param
name="ExcelFilePath">Excel文件路径</param>
///
<param
name="TableName">数据表名,如果数据表名错误,默认为第一个数据表名</param>
public static DataTable InputFromExcel(string ExcelFilePath, string
TableName)
{
if (!File.Exists(ExcelFilePath))
{
throw
new Exception("Excel文件不存在!");
}
//如果数据表名不存在,则数据表名为Excel文件的第一个数据表
ArrayList TableList = new
ArrayList();
TableList =
GetExcelTables(ExcelFilePath);
if (TableName.IndexOf(TableName)
< 0)
{
TableName =
TableList[0].ToString().Trim();
}
DataTable table = new
DataTable();
OleDbConnection dbcon
= new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
ExcelFilePath + ";Extended Properties=Excel
8.0");
OleDbCommand cmd = new
OleDbCommand("select * from [" + TableName + "$]",
dbcon);
OleDbDataAdapter adapter =
new OleDbDataAdapter(cmd);
try
{
if
(dbcon.State ==
ConnectionState.Closed)
{
dbcon.Open();
}
adapter.Fill(table);
}
catch (Exception
exp)
{
throw
exp;
}
finally
{
if
(dbcon.State ==
ConnectionState.Open)
{
dbcon.Close();
}
}
return
table;
}
/// <summary>
///
获取Excel文件指定数据表的数据列表
///
</summary>
/// <param
name="ExcelFileName">Excel文件名</param>
///
<param name="TableName">数据表名</param>
public
static ArrayList GetExcelTableColumns(string ExcelFileName, string
TableName)
{
DataTable dt = new DataTable();
ArrayList ColsList = new
ArrayList();
if
(File.Exists(ExcelFileName))
{
using
(OleDbConnection conn = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel
8.0;Data Source=" +
ExcelFileName))
{
conn.Open();
dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null,
null, TableName, null });
//获取列个数
int colcount =
dt.Rows.Count;
for (int i = 0; i < colcount;
i++)
{
string colname =
dt.Rows[i]["Column_Name"].ToString().Trim();
ColsList.Add(colname);
}
}
}
return
ColsList;
}
}