EXTJS学习系列提高篇:第二篇(转载)作者殷良胜,结合EXT2.2+C#.net实现将数据导入Excel的功能

简介:

简单介绍:

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

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

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

功能:

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

2,数据导入Excel2003/2007

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

----------------------------------------------------------------

环境:

1,EXT2.2

2,C#.net2008

3,Sql server 2005

----------------------------------------------------------------

运行说明:

1,自己建立一个数据库 Test,

2,下面是建立数据表的语句:

USE [Test]
GO
/****** 对象:  Table [dbo].[ceshione]    脚本日期: 08/22/2008 13:27:24 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[ceshione](
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [Title] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [Author] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 [Source] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
 CONSTRAINT [PK_ceshione] PRIMARY KEY CLUSTERED 
(
 [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

----------------------------------------------------------------

3,下面是项目文件路径截图

 

----------------------------------------------------------------

效果截图:

 下面是源代码

1,Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="GridPanel_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

 ---------------------------------------------------------------

2,JsonData.aspx.cs

using Newtonsoft.Json;
public partial class GridPanel_JsonData : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        #region 分页参数
        int pagesize = 5;
        int start = 1;
        string field, asc_desc;
        if (string.IsNullOrEmpty(Request["sort"]))
        {
            field = "ID";
            asc_desc = "ASC";
        }
        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 = Convert.ToString(Request["param"]);

        if (param == "initData")
        {
            Bind_Data(field, asc_desc, pagesize, start, "ceshione");
        }

        if (param == "InportExcel")
        {
            string filename = Convert.ToString(Request["filename"]);
            if (filename.Trim() == "")
            {
                filename = "数据下载";
            }
            object header = Convert.ToString(Request["header"]);
            object dataIndex = Convert.ToString(Request["dataIndex"]);
            InportExcel(filename,header,dataIndex);
        }
    }

    private void Bind_Data(string field, string asc_desc, int pagesize, int start, string tableName)
    {
        DataSet ds = Business.GetPagingData(field, asc_desc, pagesize, start, tableName);
        if (ds != null && ds.Tables[0].Rows.Count > 0)
        {
            GetJsonData(ds);
        }
        else
        {
            Response.Write("");
        }
    }

    private void GetJsonData(DataSet ds)
    {
        List<Hashtable> hashList = new List<Hashtable>();
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            DataRow row = ds.Tables[0].Rows[i] as DataRow;
            Hashtable ht = new Hashtable();
            foreach (DataColumn col in ds.Tables[0].Columns)
            {
                ht.Add(col.ColumnName, row[col.ColumnName]);
            }
            hashList.Add(ht);
        }
        int? count = Access.GetCount("Select count(*) from ceshione");
        string json = "{totalPorperty:" + count + ",result:" + JavaScriptConvert.SerializeObject(hashList) + "}";
        Response.Write(json);
    }

    private void InportExcel(string filename, object header_, object dataIndex_)
    {
        string header = header_ as string;
        string dataIndex = dataIndex_ as string;
        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 = Access.GetDataSet("Select * from ceshione") as DataSet;
            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)
                {
                    context.Response.Write("<script>document.close();</script>");
                    context.Response.Clear();
                    context.Response.Charset = "GB2312";
                    context.Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + context.Server.UrlEncode(String.Format("{0}.xls", filename)) + "\"");
                    context.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());
                }
            }
        }
        catch (Exception ee)
        {
            string error = ee.Message;
        }
        return ;
    }
    #region 导出数据
    //处理:遇到比较长的数字字符串,比如身份证号码,就会在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

}

3,数据库组件层

public class Access
{
    public Access()
    {    }
    static string connstring = ConfigurationManager.AppSettings["connectionString_yin_test"];

    private static void CreateCommand(SqlConnection conn, SqlCommand cmd, string cmdText, params SqlParameter[] prams)
    {
        conn.ConnectionString = connstring;
        if (conn.State == ConnectionState.Closed)
            conn.Open();
        cmd.Connection = conn;
        cmd.CommandText = cmdText;
        if (prams != null)
        {
            foreach (SqlParameter p in prams)
                cmd.Parameters.Add(p);
        }
    }

    public static DataSet GetDataSet(string cmdText)
    {
        return GetDataSet(cmdText,null);
    }
    public static DataSet GetDataSet(string cmdText, params SqlParameter[] prams)
    {
        using (SqlConnection conn = new SqlConnection())
        {
            SqlCommand cmd = new SqlCommand();
            CreateCommand(conn, cmd, cmdText, prams);
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);
            cmd.Parameters.Clear();
            return ds;
        }            
    }
    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? count;
            count = Convert.ToInt32( cmd.ExecuteScalar() );
            cmd.Parameters.Clear();
            return count;
        }
    }
}

4,分页代码

public class Business
{
    public static DataSet GetPagingData(string field, string asc_desc, int pagesize, int start,string tableName)
    {
        string sql = "WITH MOVIES AS ( " +
                    " SELECT ROW_NUMBER() OVER " +
                    " (ORDER BY " + field + "   "  +  asc_desc  +  " ) AS Row," +
                    " *" +
                    " FROM " + tableName + " )" +
                    " SELECT *" +
                    " FROM MOVIES " +
                    " WHERE Row between (@start-1)* @pagesize+1  and @start*@pagesize";
        SqlParameter[] prams = 
        {
            new SqlParameter("@start",start),
            new SqlParameter("@pagesize",pagesize)
        };
        return Access.GetDataSet(sql, prams);
    }
}
 

 
本文转自温景良博客园博客,原文链接:http://www.cnblogs.com/wenjl520/archive/2008/11/03/1325567.html ,如需转载请自行联系原作者
相关文章
|
9天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
61 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
1月前
|
NoSQL 关系型数据库 MySQL
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
业务诉求:考虑到数据库数据日渐增多,导出会有全量数据的导出,多人同时导出可以会对服务性能造成影响,导出涉及到mysql查询的io操作,还涉及文件输入、输出流的io操作,所以对服务器的性能会影响的比较大;结合以上原因,对导出操作进行排队; 刚开始拿到这个需求,第一时间想到就是需要维护一个FIFO先进先出的队列,给定队列一个固定size,在队列里面的人进行排队进行数据导出,导出完成后立马出队列,下一个排队的人进行操作;还考虑到异步,可能还需要建个文件导出表,主要记录文件的导出情况,文件的存放地址,用户根据文件列表情况下载导出文件。
多人同时导出 Excel 干崩服务器?怎样实现一个简单排队导出功能!
|
1月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
58 1
|
1月前
|
并行计算 安全 Java
C# .NET面试系列四:多线程
<h2>多线程 #### 1. 根据线程安全的相关知识,分析以下代码,当调用 test 方法时 i > 10 时是否会引起死锁? 并简要说明理由。 ```c# public void test(int i) { lock(this) { if (i > 10) { i--; test(i); } } } ``` 在给定的代码中,不会发生死锁。死锁通常是由于两个或多个线程互相等待对方释放锁而无法继续执行的情况。在这个代码中,只有一个线程持有锁,且没有其他线程参与,因此不
101 3
|
2天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
23天前
|
存储 SQL C#
C#实现Excel合并单元格数据导入数据集
C#实现Excel合并单元格数据导入数据集
|
1月前
|
存储 数据处理 Python
用Python实现Excel中的Vlookup功能
用Python实现Excel中的Vlookup功能
19 0
|
1月前
|
SQL Java easyexcel
【Java】百万数据excel导出功能如何实现
【Java】百万数据excel导出功能如何实现
113 0
|
1月前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
23 1