EXT2.2+C#.net+Sql 2005实现将数据导入Excel保存

简单介绍:

结合EXT2.2+C#.net+Sql 2005实现将数据导入Excel保存,

并且利用Ext2.2版本最新的功能将数据导出的按钮添加到分页条里面,这个功能在以前需要扩展Ext2.0/2.1版本才能够实现.

(动态获取数据和实现分页). 

功能:

1,将数据导出的按钮添加到分页条里

2,数据导入Excel2003/2007

3,动态获取数据和实现分页

html页面源代码


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>实现导入Excel</title>
<link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/ext-all.css" />
<link rel="Stylesheet" type="text/css" href="ExtJS/resources/css/xtheme-purple.css" />
<script type="text/javascript" src="ExtJS/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="ExtJS/ext-all.js"></script>
<script type="text/javascript" src="ExtJS/ext-lang-zh_CN.js"></script>
<style type="text/css">
.panel_icon
{ background-image:url(images/first.gif)}
.center_icon
{ background-image:url(images/center.png)}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<div id="grid_div"></div>
<script type="text/javascript">
//这里主要实现一个从后台获取数据列,然后动态添加到ColumnModel中,再也不用手动配置的方式
function ready()
{
Ext.QuickTips.init();
//声明函数变量
var data;
//动态添加列,这是关键代码
var addColumn = function()
{
this.fields = '';
this.columns = '';
this.addColumns=function(name,caption)
{
if(this.fields.length > 0)
{
this.fields += ',';
}
if(this.columns.length > 0)
{
this.columns += ',';
}
this.fields += '{name:"' + name + '"}';
this.columns += '{header:"' + caption + '",dataIndex:"' + name + '",width:100,sortable:true}';
};
};
//从服务器端获取列,然后动态添加到ColumnModel中
Ext.Ajax.request
({
url:
"gridJson.aspx?param=column",
success:
function(response,option)
{
if(response.responseText=="")
{
return;
}
data
= new addColumn();
var res = Ext.util.JSON.decode(response.responseText);
for(var i=0;i<res.length;i++)
{
for(var p in res[i])
{
data.addColumns(p,p);
}
}
//动态生成GridPanel
makeGrid();
},
failure:
function()
{
Ext.Msg.alert(
"消息","绑定数据出错!");
}
});
//动态生成GridPanel
var makeGrid = function()
{
var cm = new Ext.grid.ColumnModel(eval('([' + data.columns + '])'));
cm.defaultSortable
= true;
var fields = eval('([' + data.fields + '])');
var newStore = new Ext.data.Store
({
proxy:
new Ext.data.HttpProxy({url:"gridJson.aspx?param=data"}),
reader:
new Ext.data.JsonReader({totalProperty:"totalPorperty",root:"root",fields:fields})
});

newStore.load({params:{start:
0,limit:9}});
var pagingBar = new Ext.PagingToolbar
({
displayInfo:
true,
emptyMsg:
"没有数据显示",
displayMsg:
"当前{0}--{1}条,共{2}条数据",
store:newStore,
pageSize:
16,
items:
[
'-',
{
pressed:
true,
enableToggle:
true,
text:
'导出Excel',
cls:
'x-btn-text-icon details',
icon:
"../images/plugin.gif",
toggleHandler:
function(btn, pressed)
{
var title = "数据下载";
//如果是作为uri后面的参数传值,那就需要对字符进行编码
//如果是通过post的方式传数据,就不要做任何的编码
var cols = eval(cm);
var header = "";
var dataIndex = "";
for(var i=0;i<cols.config.length;i++)
{
header
+= cols.config[i].header+",";
dataIndex
+= cols.config[i].dataIndex+",";
}
var uri = "gridJson.aspx?param=InportExcel" + "&filename=" + escape(title) + "&header=" +header+ "&dataIndex=" +dataIndex;
window.location.href
= uri;
}
},
'-'
]
});
var gridPanel = new Ext.grid.GridPanel
({
title:
"导出Excel",
cm:cm,
id:
"grid_panel",renderTo:"grid_div",
store:newStore,
frame:
false,
border:
true,
layout:
"fit",
pageSize:
9,
autoWidth:
true,
height:
300,
width:
600,
viewConfig:{forceFit:
true},
bbar:pagingBar
});
};
}
Ext.onReady(ready);
</script>
</div>
</form>
</body>
</html>

 

后台源代码



using Newtonsoft.Json;
using System.IO;
public partial class Json : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
#region 分页
int pagesize = 20;
int start = 1;
string field, asc_desc;
if (string.IsNullOrEmpty(Request["sort"]))
{
field
= "ID";
asc_desc
= "desc";
}
else
{
field
= Request["sort"];
asc_desc
= Request["dir"];
}
if (!string.IsNullOrEmpty(Request["limit"]))
{
pagesize
= int.Parse(Request["limit"]);
start
= int.Parse(Request["start"]);
}
start
= start / pagesize;
start
+= 1;
#endregion
string param = Request["Param"];
switch (param)
{
case "data":
Response.Write(Select(field, asc_desc, pagesize, start));
break;
case "column":
Response.Write(GetDataColumn());
break;
case "InportExcel":
InportExcel();
break;
default:
break;
}
}
#region 导出数据到Excel
void InportExcel()
{
string filename = Convert.ToString(Request["filename"]);
if (filename.Trim() == "")
{
filename
= "数据下载";
}
string header = Convert.ToString(Request["header"]);
string dataIndex = Convert.ToString(Request["dataIndex"]);

if (header.Trim() == "" || dataIndex.Trim() == "")
{
return;
}

string[] cName = header.Substring(0, header.LastIndexOf(",")).Split(',');
string[] eName = dataIndex.Substring(0, dataIndex.LastIndexOf(",")).Split(',');

GridView gridViewAll
= new GridView();//用于从数据库中将所有相关数据导入Excel中
System.Web.HttpContext context = System.Web.HttpContext.Current;
try
{
DataSet ds
= ExtBusiness.GetMoreRow();
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
for (int i = 0; i < cName.Length; i++)
{
BoundField bf
= new BoundField();
bf.DataField
= Convert.ToString(eName[i]);
bf.HeaderText
= Convert.ToString(cName[i]);
gridViewAll.Columns.Add(bf);
}

gridViewAll.RowDataBound
+= new GridViewRowEventHandler(gridViewAll_RowDataBound);
gridViewAll.AutoGenerateColumns
= false;

gridViewAll.DataSource
= ds;
gridViewAll.DataBind();
if (gridViewAll.Rows.Count > 0)
{
Response.Write(
"<script>document.close();</script>");
Response.Clear();
Response.Charset
= "GB2312";
Response.AppendHeader(
"Content-Disposition", "attachment;filename=/"" + context.Server.UrlEncode(String.Format("{0}.xls", filename)) + "/"");
Response.ContentType
= "application/ms-excel";//设置输出文件类型为excel文件。
StringWriter sw = new StringWriter();
HtmlTextWriter htw
= new HtmlTextWriter(sw);
gridViewAll.RenderControl(htw);
StringWriter sw2
= new StringWriter();
sw2
= sw;
gridViewAll.Dispose();
Response.Output.Write(sw.ToString());
Response.Output.Flush();
Response.End();
}
}
}
catch (Exception ee)
{
string error = ee.Message;
}
return;
}
//处理:遇到比较长的数字字符串,比如身份证号码,就会在Excel里当成数字看待,并转换成科学计数法的格式,以免造成数据的丢失
protected void gridViewAll_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
for (int i = 0; i < e.Row.Cells.Count; i++)
{
e.Row.Cells[i].Attributes.Add(
"style", "vnd.ms-excel.numberformat:@");
}
}
}
#endregion

//获取数据
string Select(string field, string asc_desc, int pagesize, int start)
{
string json = "";
try
{
DataSet ds
= ExtUtil.PaginationByTableName(field, asc_desc, pagesize, start, "TypeTable");//获取集合
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
json
= ExtUtil.GetJsonString(ds);//获取Json字符串
int count = ExtUtil.GetCountByTableName("TypeTable");//获取行数
json = "{totalPorperty:" + count + ",root:" + json + "}";
}
}
catch (Exception ee)
{
string error = ee.Message;
}
return json;
}

//获取数据列
string GetDataColumn()
{
DataSet ds
= ExtBusiness.GetMoreRow();//获取dataset集合
//只要ds不为null,则不管该表是否有数据,都有数据列生成
if (ds != null)
{
List
<Hashtable> htList = new List<Hashtable>();
foreach (DataColumn col in ds.Tables[0].Columns)
{
Hashtable ht
= new Hashtable();
ht.Add(col.ColumnName, col.ColumnName);
htList.Add(ht);
}
try
{
string json = JavaScriptConvert.SerializeObject(htList);//获取Json字符串
return json;
}
catch (Exception ee)
{
string error = ee.Message;
}
}
return "";
}
}

 

业务组件层



using System.Data.SqlClient;
/// <summary>
///业务层组件
/// </summary>
public class ExtBusiness
{
/// <summary>
/// 获取集合的操作
/// </summary>
/// <returns></returns>
public static DataSet GetMoreRow()
{
string sql = "select * from TypeTable";

DataSet ds
= new DataSet();
try
{
ds
= ExtAccess.GetMoreRow(sql);
}
catch (Exception ee)
{
string error = ee.Message;
}
return ds;
}

/// <summary>
/// 根据表名获取数据操作
/// </summary>
/// <param name="tableName">int</param>
/// <returns></returns>
public static DataSet GetMoreRowByTableName(string tableName)
{
string sql = String.Format("select * from {0}", tableName);

DataSet ds
= new DataSet();
try
{
ds
= ExtAccess.GetMoreRow(sql);
}
catch (Exception ee)
{
string error = ee.Message;
}
return ds;
}

/// <summary>
/// 根据Sql语句获取数据操作
/// </summary>
/// <param name="sql">int</param>
/// <returns></returns>
public static DataSet GetMoreRowBySql(string cmdText)
{
string sql = String.Format("select * from ({0}) a ", cmdText);

DataSet ds
= new DataSet();
try
{
ds
= ExtAccess.GetMoreRow(sql);
}
catch (Exception ee)
{
string error = ee.Message;
}
return ds;
}

/// <summary>
/// 获取图片类别的集合的操作
/// </summary>
/// <param name="typeID">int</param>
/// <returns></returns>
public static DataSet GetMoreRow(string typeID)
{
string sql = "select * from TypeTable where PID = @TypeID";
SqlParameter[] prams
=
{
new SqlParameter("@TypeID",typeID)
};

DataSet ds
= new DataSet();
try
{
ds
= ExtAccess.GetMoreRow(sql, prams);
}
catch (Exception ee)
{
string error = ee.Message;
}
return ds;
}

/// <summary>
/// 获取图片类别的集合的操作
/// </summary>
/// <param name="typeID">int</param>
/// <returns></returns>
public static DataSet GetAllRow(string typeID)
{
string sql = string.Format("select * from TypeTable where PID = '{0}'", typeID);


DataSet ds
= new DataSet();
try
{
ds
= ExtAccess.GetMoreRow(sql);
}
catch (Exception ee)
{
string error = ee.Message;
}
return ds;
}

public static bool HasChildNode(string id)
{
string sql = "select ID from TypeTable where PID = @TypeID";
SqlParameter[] prams
=
{
new SqlParameter("@TypeID",id)
};

bool flag = true;
try
{
int ID = Convert.ToInt32(ExtAccess.GetOneItem(sql, prams));
if (ID > 0)
{
flag
= false;
}
}
catch (Exception ee)
{
string error = ee.Message;
}
return flag;
}
}

 

数据组件层



using System.Data.SqlClient;
/// <summary>
/// 数据访问组件层
/// </summary>
public class ExtAccess
{
/// <summary>
/// 连接字符串
/// </summary>
static string dataBaseString = ConfigurationManager.ConnectionStrings["SampleAccess"].ConnectionString;
static string dd = dataBaseString;
/// <summary>
/// 创建命令
/// </summary>
/// <param name="conn"></param>
/// <param name="cmd"></param>
/// <param name="cmdText"></param>
/// <param name="prams"></param>
private static void CreateCommand(SqlConnection conn, SqlCommand cmd, string cmdText, params SqlParameter[] prams)
{
conn.ConnectionString
= dataBaseString;
if (conn.State == ConnectionState.Closed)
conn.Open();
cmd.Connection
= conn;
cmd.CommandText
= cmdText;
if (cmdText.Contains(" "))
{
cmd.CommandType
= CommandType.Text;
}
else
{
cmd.CommandType
= CommandType.StoredProcedure;
}
if (prams != null)
{
foreach (SqlParameter p in prams)
cmd.Parameters.Add(p);
}
}

/// <summary>
/// 添加数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static int Add(string cmdText)
{
return Add(cmdText, null);
}
public static int Add(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
int o = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return o;
}
}

/// <summary>
/// 修改数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static int Edit(string cmdText)
{
return Edit(cmdText, null);
}
public static int Edit(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
int o = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return o;
}
}

/// <summary>
/// 删除一条数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static int DeleteOneRow(string cmdText)
{
return DeleteOneRow(cmdText, null);
}
public static int DeleteOneRow(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
int o = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return o;
}
}

/// <summary>
/// 删除多条数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static int DeleteMoreRow(string cmdText)
{
return DeleteMoreRow(cmdText, null);
}
public static int DeleteMoreRow(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
int o = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return o;
}
}

/// <summary>
/// 获取一行数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static DataRow GetOneRow(string cmdText)
{
return GetOneRow(cmdText, null);
}
public static DataRow GetOneRow(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
SqlDataAdapter da
= new SqlDataAdapter(cmd);
DataSet ds
= new DataSet();
da.Fill(ds);
cmd.Parameters.Clear();
DataRow row
= new DataTable().NewRow();
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
foreach (DataColumn col in ds.Tables[0].Columns)
{
row[col.ColumnName]
= Convert.ToString(ds.Tables[0].Rows[0]["col.ColumnName"]);
}
}
return row;
}
}

/// <summary>
/// 获取多行数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static DataSet GetMoreRow(string cmdText)
{
return GetMoreRow(cmdText, null);
}
public static DataSet GetMoreRow(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
SqlDataAdapter da
= new SqlDataAdapter(cmd);
DataSet ds
= new DataSet();
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
}

/// <summary>
/// 得到一项数据
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static object GetOneItem(string cmdText)
{
return GetOneItem(cmdText, null);
}
public static object GetOneItem(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
object o = cmd.ExecuteScalar();
cmd.Parameters.Clear();
return o;
}
}

/// <summary>
/// 得到总数
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
public static int GetCount(string cmdText)
{
return GetCount(cmdText, null);
}
public static int GetCount(string cmdText, params SqlParameter[] prams)
{
using (SqlConnection conn = new SqlConnection())
{
SqlCommand cmd
= new SqlCommand();
CreateCommand(conn, cmd, cmdText, prams);
int value = 0;
object o = cmd.ExecuteScalar();
if (o == null)
value
= 0;
else
value
= Convert.ToInt32(o);
cmd.Parameters.Clear();
return value;
}
}
}

 

公共组件层



using Newtonsoft.Json;
using System.Collections;
using System.Collections.Generic;
/// <summary>
///ExtUtil 的摘要说明
/// </summary>
public class ExtUtil
{
/// <summary>
/// 获取JsonString
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public static string GetJsonString(DataSet ds)
{
string res = ""; ;
IList
<Hashtable> mList = new List<Hashtable>();
try
{
foreach (DataRow row in ds.Tables[0].Rows)
{
Hashtable ht
= new Hashtable();
foreach (DataColumn col in ds.Tables[0].Columns)
{
ht.Add(col.ColumnName, row[col.ColumnName]);
}
mList.Add(ht);
}
res
= JavaScriptConvert.SerializeObject(mList);
}
catch (Exception ee)
{
string error = ee.Message;
}
return res;
}

/// <summary>
/// 根据SQL语句分页
/// </summary>
/// <param name="field">排序字段</param>
/// <param name="asc_desc">排序方向</param>
/// <param name="pagesize">页大小</param>
/// <param name="start">页索引</param>
/// <param name="sqlText">表名或者完整语句</param>
/// <returns></returns>
public static DataSet PaginationBySQL(string field, string asc_desc, int pagesize, int start, string sqlText)
{
string sql = String.Format("WITH Data_DataSet AS ( " +
" SELECT ROW_NUMBER() OVER " +
" (ORDER BY " + field + " " + asc_desc + " ) AS Row," +
" * FROM ( " + sqlText + " ) aa )" +
" SELECT * FROM Data_DataSet " +
" WHERE Row between ({0}-1)* {1}+1 and {0}*{1}", start, pagesize);
return ExtAccess.GetMoreRow(sql);
}

/// <summary>
/// 根据表名分页
/// </summary>
/// <param name="field">排序字段</param>
/// <param name="asc_desc">排序方向</param>
/// <param name="pagesize">页大小</param>
/// <param name="start">页索引</param>
/// <param name="sqlText">表名或者完整语句</param>
/// <returns></returns>
public static DataSet PaginationByTableName(string field, string asc_desc, int pagesize, int start, string tableName)
{
string sql = String.Format("WITH MOVIES AS ( " +
" SELECT ROW_NUMBER() OVER " +
" (ORDER BY " + field + " " + asc_desc + " ) AS Row," +
" *" +
" FROM " + tableName + " )" +
" SELECT *" +
" FROM MOVIES " +
" WHERE Row between ({0}-1)* {1}+1 and {0}*{1}", start, pagesize);
return ExtAccess.GetMoreRow(sql);
}

/// <summary>
/// 根据表名获取总数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int GetCountByTableName(string tableName)
{
return ExtAccess.GetCount(String.Format("select Count(*) from {0} ", tableName));
}

/// <summary>
/// 默认根据表名获取总数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int GetCount(string tableName)
{
return ExtAccess.GetCount(String.Format("select Count(*) from {0} datatable", tableName));
}

/// <summary>
/// 根据Sql语句获取总数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int GetCountBySql(string sql)
{
return ExtAccess.GetCount(sql);
}

/// <summary>
/// 根据Sql语句获取总数
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public static int GetCountNumberBySql(string tableName)
{
return ExtAccess.GetCount(String.Format("select Count(*) from ({0}) datatable", tableName));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值