基于GridView控件仿EXCEL格式显示数据的网页制作

合集下载

C#-WebForm-GridView表格展示数据

C#-WebForm-GridView表格展示数据

C#-WebForm-GridView表格展⽰数据GrideView 控件,功能是将数据库的数据⽤表格的形式展⽰在页⾯上⼀、<源>代码中放⼊ GridView 控件打开<设计>界⾯⼆、绑定数据源(⼀)创建 LinQ 类(⼆)新建数据源 ⼯具箱→数据:LinqDataSource(三)绑定数据(1)配置数据源(2)绑定数据效果:三、设置样式属性(1)⾃动套⽤格式(2)表格宽度(3)表格属性(4)编辑列四、设置显⽰内容(1)Sex 显⽰男⼥删除原有列,在“可⽤字段”(模板)中,在BoundField(默认模板)中添加新的Sex模板,并设置其位置属性扩展绑定数据(2)Nation 属性扩展(3)Birthday 显⽰ 格式:{0:****} —— “0”代表当前的数据,“****”代表字符串格式(4)在姓名后加“同学”两个字最终效果:五、标红预警:设置数据⾏创建的时候出发的事件——RowDataBound每⼀⾏的创建都会触发⼀次事件,包括表头和表尾⾏绑定数据时触发事件:public partial class Default2 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}//⾏绑定数据时触发的事件protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {//数据的⾏对象绑定到基础数据对象Users(e 是绑定的数据)Users u = e.Row.DataItem as Users;//进⾏判断是否为空,因为表头和表尾是没有数据绑定的,所以为null,跳过下列事件if (u != null){//性别为男的⾏背景⾊为红⾊if (u.sex == true){e.Row.BackColor = System.Drawing.Color.Red;e.Row.ForeColor = System.Drawing.Color.White;}//民族为N003的背景⾊为黄⾊if(u.nation=="N003"){e.Row.BackColor = System.Drawing.Color.Yellow;}}}}⾏数据绑定时触发此事件效果:六、数据的增删改增加:⽤超链接打开新的⽹页删除和修改: 在数据上选中“启⽤删除”和“启⽤更新” GridView 选中“启⽤编辑”和“启⽤删除” 通过“编辑列”,添加标头并将列放在数据最后七、点击“编辑”按钮打开编辑页⾯,所有的修改项都是text编辑框,如何将性别设置单选按钮、⽣⽇设置为⽇期选择、民族为下拉列表?(1)将列转换为⾃定义模板(2)编辑⾃定义模板为控件编辑要绑定的属性绑定完数据右键结束操作(4)设置“民族”修改模板 因为之前绑定的是Users表,选择需要的是Nation表,所有需要新建数据源 绑定数据即可⼋、如何让性别显⽰男⼥头像图⽚?(1)属性扩展返回图⽚路径(2)绑定九、分页(1)属性→分页。

ASP.NET中GridView读取Excel数据的实现

ASP.NET中GridView读取Excel数据的实现

中GridView读取Excel数据的实现皇甫大双【摘要】在网站建设中,我们经常需要从Excel表格巾读取一些相应的信息在页面上来显示,提供给用户方便的查看,怎样实现这一功能呢?Visual Studio 2005中有诸多的用来显示数据的控件,如DataGrid、Repeater、GridView等,这些控件由于各自的特点、属性的不同,因而都有自己独特的应用领域.本文就如何使用GridView显示控件来实现从Excel表格中读取数据进行研究和实现.【期刊名称】《办公自动化(综合版)》【年(卷),期】2011(000)005【总页数】3页(P49-50,52)【关键词】;Visual Studio2005;GridView显示控件【作者】皇甫大双【作者单位】徐州机电工程高等职业学校徐州221011【正文语种】中文【中图分类】TP392一、引言众所周知Excel是微软公司开发的Office家族中的一款重要的应用软件,其强大的数据处理和分析能力,以及友好的界面受到了广大用户的喜爱。

因此在很多公司Excel已经完全成为了一种生产工具,在各个核心部门发挥着重要的作用,用户完全可以按照自己的思路来创建电子表格,并在Excel的帮助下出色的完成工作任务。

正因为如此,很多时候在我们开发的web网站和OA系统中要将Excel文件中的数据导入页面而显示出来。

本文介绍了在以VS2005为开发工具的web应用程序中,如何将Excel表格中的员工信息导入页面Gridview中显示。

二、简介是微软公司提出的用于创建动态web内容的一种强大的服务器端技术,此技术大量使用组件技术,将Web浏览器和Web服务器之间的通信完全的包装起来。

作为战略产品,不仅仅是Active Server Page(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。

的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。

ASP.NET应用开发程教学资源的案例6 实现信息表格形式显示

ASP.NET应用开发程教学资源的案例6 实现信息表格形式显示
写程序就可以实现以表格形式输出信息,图书信息查询页面就是以这种 方式输出的。
2
6.2 案例完成步骤
6.2.1 创建项目和页面
1.创建Web项目 2.添加页面 3. 布局页面
3
6.2 案例完成步骤
6.2.2 布局控件
在book_search.aspx页面上添加1个3行1列的表格,在表格 中添加1个Label控件、1个TextBox控件、1个ImageButton 控件和1个GridView控件,最终设计效果如图
4
6.2 案例完成步骤
6.2.2 布局控件
1.GridView控件的HTML代码
5
6.2 案例完成步骤
6.2.2 布局控件
2.GridView控件的格式设置 为了让数据显示界面美观,还需要设置GridView控件的格式
6
6.2 案例完成步骤
6.2.2 布局控件
3.GridView控件数据列的绑定 通过GridView控件显示数据,可以使用其“自动生成字段” 功能,绑定数据列,也可以根据自己的需要从数据集中筛选 出要绑定的数据列
8
6.2 案例完成步骤
6.2.3 编码实现
2.编写数据库访问公共类 1)定义一个从Web.config文件获取数据库连接字符串的方 法
1 2 3 4 5 6 } public String GetConnectionString() { String ConStr; ConStr = System.Configuration.ConfigurationManager.AppSettings.Get(0).ToString(); return ConStr;
10
6.2 案例完成步骤
6.2.3 编码实现

asp.net+Ligerui实现grid导出Excel和Word的方法_

asp.net+Ligerui实现grid导出Excel和Word的方法_

+Ligerui实现grid导出Excel和Word的方法_本文实例讲解并描述了+Ligerui实现grid 导出Excel和Word的方法。

分享给大家供大家参考,具体如下:下面采纳的导EXCEL方法,适合不翻页的grid,而且无需再读一次数据库,对于翻页的grid来说,要导全部,当然后台要再读一次数据库,这种导EXCEL方法baidu一大堆,这里不重复代码部分:grid.htm:!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""l1/DTD/xhtml1-transitional.dtd"html xmlns="l"headtitle/titlelinkhref="../lib/ligerUI/skins/Aqua/css/ligerui-all.css " rel="stylesheet" type="text/css" /linkhref="../lib/ligerUI/skins/ligerui-icons.css"rel="stylesheet" type="text/css" /script src="../lib/jquery/jquery-1.3.2.min.js" type="text/javascript"/scriptscriptsrc="../lib/ligerUI/js/plugins/ligerGrid.js"type="text/javascript"/scriptscriptsrc="../lib/ligerUI/js/plugins/ligerToolBar.js"type="text/javascript"/scriptscriptsrc="../lib/ligerUI/js/plugins/ligerDialog.js"type="text/javascript"/scriptscript src="AllProductData.js" type="text/javascript"/scriptscript type="text/javascript"$(function () {$("#toptoolbar").ligerToolBar({ items: [{text: '导出Excel',id:'excel',icon:'print',click:itemclick},{text: '导出Word' ,id:'word',icon:'print',click:itemclick}]});$("#maingrid").ligerGrid({columns: [{ display: '主键', name: 'ProductID', type: 'int', totalSummary:{type: 'count'}},{ display: '产品名', name: 'ProductName', align: 'left', width: 200 },{ display: '单价', name: 'UnitPrice', align: 'right', type:'float',totalSummary:{render: function (suminf, column, cell){return 'div最大值:' + suminf.max + '/div';},align: 'left'}},{ display: '仓库数量', name: 'UnitsInStock', align: 'right', type: 'float',totalSummary:{type: 'sum'}}],dataAction: 'local',data: AllProductData, sortName: 'ProductID', showTitle: false, totalRender: f_totalRender, width: '100%', height: '100%',heightDiff:-10 });$("#pageloading").hide();});function f_totalRender(data, currentPageData) {return "总仓库数量:"+data.UnitsInStockTotal; }function itemclick(item){grid = $("#maingrid").ligerGetGridManager(); if(item.id){switch (item.id){case "excel":$.ligerDialog.open({url: "../service/print.aspx?exporttype=xls"});return;case "word":$.ligerDialog.open({url: "../service/print.aspx?exporttype=doc"});return;}}}/script/headbody style="padding:0px; overflow:hidden; height:100% "div id="toptoolbar"/divdiv id="maingrid" style="margin:0; padding:0"/div div style="display:none;"/div/body/html导出页面print.aspx%@ Page Language="C#" AutoEventWireup="true" CodeBehind="print.aspx.cs" Inherits="example" EnableEventValidation = "false" ValidateRequest="false" %htmlheadtitle/titlelinkhref="../lib/ligerUI/skins/aqua/css/ligerui-all.css " rel="stylesheet" type="text/css" /script src="../lib/jquery/jquery-1.3.2.min.js" type="text/javascript"/scriptscriptsrc="../lib/ligerUI1.1.0/js/ligerui.min.js"type="text/javascript"/scriptscript type="text/javascript"function GetQueryString(name){var reg = new RegExp("(^|)"+name+"=([^]*)(|$)"); var r= window.location.search.substr(1).match(reg);if (r!=null) return unescape(r[2]);return null; }function gethtml(g){parent.$(".l-grid-header-table",g).attr("border","1 ");parent.$(".l-grid-body-table",g).attr("border","1"); $("#hf").val(parent.$(".l-grid-header",g).html()+ //这里把表头捞出来parent.$(".l-grid-body-inner",g).html()+//表身,具体数据parent.$(".l-panel-bar-total",g).html()+"br/"+ //这是全局汇总,1.1.0版本新添加的parent.$(".l-bar-text",g).html() //这是翻页讯息);parent.$(".l-grid-header-table",g).attr("border","0 ");parent.$(".l-grid-body-table",g).attr("border","0"); //parent.$(".l-grid-header-table",g).removeAttr("bord er");//parent.$(".l-grid-body-table",g).removeAttr("border ");}function init(){if (GetQueryString("exporttype")=="xls"){document.getElementById("btnxls").click();}else{document.getElementById("btndoc").click();}setTimeout(function (){parent.$.ligerDialog.close();}, 3000);}/script/headbody style="padding:20px" onload="init()"form id="form1" runat="server"导出中...div style="visibility:hidden"asp:Button ID="btnxls" runat="server" Text="导出Excel" onclick="Button1_Click" OnClientClick="gethtml('#maingrid')"/asp:Button ID="btndoc" runat="server" Text="导出Word" onclick="Button2_Click" OnClientClick="gethtml('#maingrid')"//divasp:HiddenField ID="hf" runat="server" //form/body/htmlprint.aspx.csusing System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;namespace service{public partial class print : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){}}void exportexcel(){Response.Clear();Response.Buffer = true;Response.Charset = "utf-8";Response.AppendHeader("Content-Disposition", "attachment;filename=tmp.xls");Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");Response.ContentType = "application/ms-excel"; this.EnableViewState = false;System.IO.StringWriter oStringWriter = new System.IO.StringWriter();System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);oHtmlTextWriter.WriteLine(hf.Value);Response.Write(oStringWriter.ToString());Response.End();}void exportword(){Response.Clear();Response.Buffer = true;Response.Charset = "utf-8";Response.AppendHeader("Content-Disposition", "attachment;filename=tmp.doc");Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");Response.ContentType = "application/ms-word"; this.EnableViewState = false;System.IO.StringWriter oStringWriter = new System.IO.StringWriter();System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);oHtmlTextWriter.WriteLine(hf.Value);Response.Write(oStringWriter.ToString());Response.End();}protected void Button1_Click(object sender, EventArgs e){exportexcel();}protected void Button2_Click(object sender, EventArgs e){exportword();}}}原理:在点导出按钮的时候,弹一个print.aspx页面,这个页面把grid的html传给自己一个叫hf的hidden里面,然后后台response输出这个html盼望本文所述对大家程序设计有所关心。

DevExpress中GridControl自定义格式导出Excel

DevExpress中GridControl自定义格式导出Excel

DevExpress中GridControl自定义格式导出Excelusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;using Microsoft.Office.Interop.Excel;namespace DailyWorkChecking.DBUtility{public class ToExcel{////// 可以自定义导出Excel的格式,传的参数为GridView/////////public static void ExportGridViewT oExcel(DevExpress.XtraGrid.Views.Grid.GridView gridView, string filename){//System.Data.DataTable dt = (System.Data.DataTable)gridView.DataSource;SaveFileDialog sfd = new SaveFileDialog();filename += DateTime.Now.T oString("yyyyMMdd") + "-" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString();sfd.FileName = filename;sfd.Filter = "Excel files (*xls) | *.xls";sfd.RestoreDirectory = true;if (sfd.ShowDialog() == DialogResult.OK && sfd.FileName.Trim() != null){int rowIndex = 1;int colIndex = 0;int colNum = gridView.Columns.Count;System.Reflection.Missing miss = System.Reflection.Missing.Value;Microsoft.Office.Interop.Excel.Application xlapp = new Microsoft.Office.Interop.Excel.Application();xlapp.Visible = true;Microsoft.Office.Interop.Excel.Workbooks mBooks = (Microsoft.Office.Interop.Excel.Workbooks)xlapp.Workbooks;Microsoft.Office.Interop.Excel.Workbook mBook = (Microsoft.Office.Interop.Excel.Workbook)mBooks.Add(miss);Microsoft.Office.Interop.Excel.Worksheet mSheet = (Microsoft.Office.Interop.Excel.Worksheet)mBook.ActiveSheet;Microsoft.Office.Interop.Excel.Range mRange = mSheet.get_Range((object)"A1",System.Reflection.Missing.Value);//设置对齐方式mSheet.Cells.HorizontalAlignment = XlHAlign.xlHAlignCenter;//设置文字自动换行//mSheet.Cells.WrapText = true;//设置第一行高度,即标题栏((Microsoft.Office.Interop.Excel.Range)mSheet.Rows["1:1", System.Type.Missing]).RowHeight = 20;//设置数据行行高度((Microsoft.Office.Interop.Excel.Range)mSheet.Rows["2:" + gridView.RowCount + 1, System.Type.Missing]).RowHeight = 16;//设置字体大小(10号字体)mSheet.Range[mSheet.Cells[1, 1], mSheet.Cells[gridView.RowCount + 1, gridView.Columns.Count]].Font.Size = 10;//设置单元格边框Microsoft.Office.Interop.Excel.Range range1 = mSheet.Range[mSheet.Cells[1, 1], mSheet.Cells[gridView.RowCount + 1, gridView.Columns.Count]];range1.Borders.LineStyle = 1;//写标题for (int row = 1; row <= gridView.Columns.Count; row++){mSheet.Cells[1, row] = gridView.Columns[row - 1].GetTextCaption();}try{for (int i = 0; i < gridView.RowCount; i++){rowIndex++;colIndex = 0;for (int j = 0; j < gridView.Columns.Count; j++){colIndex++;mSheet.Cells[rowIndex, colIndex] = gridView.GetRowCellValue(i, gridView.Columns[j]);}}mBook.SaveAs(sfd.FileName,Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, miss, miss, miss, miss, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);//return true;}catch (Exception ex){//throw new Exception(ex.Message);}finally{//mBook.Close(false, miss, miss);mBooks.Close();xlapp.Quit();System.Runtime.InteropServices.Marshal.ReleaseComObject (mRange);System.Runtime.InteropServices.Marshal.ReleaseComObject (mSheet);System.Runtime.InteropServices.Marshal.ReleaseComObject (mBook);System.Runtime.InteropServices.Marshal.ReleaseComObject (mBooks);System.Runtime.InteropServices.Marshal.ReleaseComObject (xlapp);GC.Collect();}}else{//return false;}}}}。

ASP.NET使用GridView导出Excel实现方法

ASP.NET使用GridView导出Excel实现方法

使⽤GridView导出Excel实现⽅法本⽂实例讲述了使⽤GridView导出Excel实现⽅法。

分享给⼤家供⼤家参考。

具体实现⽅法如下:复制代码代码如下:/// <summary>/// 将DataTable数据导出到EXCEL,调⽤该⽅法后⾃动返回可下载的⽂件流/// </summary>/// <param name="dtData">要导出的数据源</param>public static void DataTable1Excel(System.Data.DataTable dtData){System.Web.UI.WebControls.GridView gvExport = null;// 当前对话System.Web.HttpContext curContext = System.Web.HttpContext.Current;// IO⽤于导出并返回excel⽂件System.IO.StringWriter strWriter = null;System.Web.UI.HtmlTextWriter htmlWriter = null;if (dtData != null){// 设置编码和附件格式curContext.Response.ContentType = "application/vnd.ms-excel";curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");curContext.Response.Charset = "utf-8";// 导出excel⽂件strWriter = new System.IO.StringWriter();htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);// 为了解决gvData中可能进⾏了分页的情况,需要重新定义⼀个⽆分页的GridViewgvExport = new System.Web.UI.WebControls.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();}}/// <summary>/// 直接输出Excel/// </summary>/// <param name="dtData"></param>public static void DataTable2Excel(System.Data.DataTable dtData){ 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 (dtData != null) { // 设置编码和附件格式 curContext.Response.ContentType = "application/vnd.ms-excel"; curContext.Response.ContentEncoding =System.Text.Encoding.UTF8; curContext.Response.Charset = ""; // 导出excel⽂件 strWriter = new System.IO.StringWriter(); htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter); // 为了解决dgData中可能进⾏了分页的情况,需要重新定义⼀个⽆分页的DataGrid dgExport = new System.Web.UI.WebControls.DataGrid(); dgExport.DataSource = dtData.DefaultView; dgExport.AllowPaging = false; dgExport.DataBind(); // 返回客户端 dgExport.RenderControl(htmlWriter); curContext.Response.Write(strWriter.ToString()); curContext.Response.End(); }}希望本⽂所述对⼤家的程序设计有所帮助。

winform中DataGridView导出Excel(使用NPOI,速度最快的一种方法)

winform中DataGridView导出Excel(使用NPOI,速度最快的一种方法)

winform中DataGridView导出Excel(使⽤NPOI,速度最快的⼀种⽅法)1,在⽹上搜索到的⼀般是这种通⽤的⽅法,这个⽅法速度太慢了,代码如下private void ExportExcel(string fileName, DataGridView myDGV){string saveFileName = "";SaveFileDialog saveDialog = new SaveFileDialog();saveDialog.DefaultExt = "xls";saveDialog.Filter = "Excel⽂件|*.xls";saveDialog.FileName = fileName;saveDialog.ShowDialog();saveFileName = saveDialog.FileName;if (saveFileName.IndexOf(":") < 0) return; //被点了取消Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();if (xlApp == null){MessageBox.Show("⽆法创建Excel对象,可能您的机⼦未安装Excel");return;}Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1//写⼊标题for (int i = 0; i < myDGV.ColumnCount; i++){worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;}//写⼊数值for (int r = 0; r < myDGV.Rows.Count; r++){for (int i = 0; i < myDGV.ColumnCount; i++){worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;}System.Windows.Forms.Application.DoEvents();}worksheet.Columns.EntireColumn.AutoFit();//列宽⾃适应if (saveFileName != ""){try{workbook.Saved = true;workbook.SaveCopyAs(saveFileName);}catch (Exception ex){MessageBox.Show("导出⽂件时出错,⽂件可能正被打开!\n" + ex.Message);}}xlApp.Quit();GC.Collect();//强⾏销毁MessageBox.Show("⽂件: " + fileName + ".xls 保存成功", "信息提⽰", MessageBoxButtons.OK, rmation);}2,最近研究了半天,使⽤NOPI的⽅法真是的太快了,秒存的感觉【2.1】使⽤:private void btn_export_Click(object sender, EventArgs e){try{ExcelHelper.ExportToExcel(this.dgv_data);new FrmConfirmSingle("⽇志导出", "⽇志记录导出成功") { TopMost = true }.ShowDialog();}catch (Exception exception){new FrmConfirmSingle("⽇志导出", "⽇志记录导出失败:"+exception.Message) { TopMost = true }.ShowDialog();}} 【2.2】主要代码如下:/// <summary>/// 由DataGridView导出Excel/// </summary>/// <param name="grid"></param>/// <param name="sheetName"></param>/// <param name="filePath"></param>/// <returns></returns>public static string ExportToExcel(DataGridView grid, string sheetName = "result", string filePath = null){if (grid.Rows.Count <= 0) return null;if (string.IsNullOrEmpty(filePath)){filePath = GetSaveFilePath();}IWorkbook workbook = CreateWorkbook(isCompatible);ICellStyle cellStyle = GetCellStyle(workbook);ISheet sheet = workbook.CreateSheet(sheetName);IRow headerRow = sheet.CreateRow(0);for (int i = 0; i < grid.Columns.Count; i++){ICell cell = headerRow.CreateCell(i);cell.SetCellValue(grid.Columns[i].Name);cell.CellStyle = cellStyle;}int rowIndex = 1;foreach (DataGridViewRow row in grid.Rows){IRow dataRow = sheet.CreateRow(rowIndex);for (int n = 0; n < grid.Columns.Count; n++){dataRow.CreateCell(n).SetCellValue((row.Cells[n].Value ?? "").ToString());}rowIndex++;}AutoColumnWidth(sheet, stCellNum - 1);FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);workbook.Write(fs);fs.Dispose();sheet = null;headerRow = null;workbook = null;MessageBox.Show("⽂件: " + filePath + ".xls 保存成功", "信息提⽰", MessageBoxButtons.OK, rmation); return filePath;} 【2.3】下⾯是我整理的通⽤EXCEL的帮助类,⾮常的实⽤using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Windows.Forms;using erModel;using erModel;using erModel;using System.Collections;using pilerServices;/** 须在项⽬中添加引⽤ NPOI.dll NPOI.OOXML.dll NPOI.OPenXml4Net.dll*/namespace AutomaticStoreMotionDal{public static class ExcelHelper{/// <summary>/// 获取要保存的⽂件名称(含完整路径)/// </summary>/// <returns></returns>public static string GetSaveFilePath(){SaveFileDialog saveFileDig = new SaveFileDialog();saveFileDig.Filter = "Excel Office97-2003(*.xls)|*.xls|Excel Office2007及以上(*.xlsx)|*.xlsx";saveFileDig.FileName = DateTime.Now.ToString("yyyyMMddHHmmss");saveFileDig.FilterIndex = 0;saveFileDig.OverwritePrompt = true;string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//获取当前系统桌⾯路径saveFileDig.InitialDirectory = dir;string filePath = null;if (saveFileDig.ShowDialog() == DialogResult.OK){filePath = saveFileDig.FileName;}return filePath;}/// <summary>/// 打开⽂件对话框,并返回⽂件的路径/// </summary>/// <returns></returns>public static string GetOpenFilePath(){//创建对话框的对象ofd.Multiselect = true;//设置对话框的初始⽬录ofd.InitialDirectory = @"C:\Users\Administrator\Desktop";//设置对话框打开⽂件的类型ofd.Filter = "Excel⽂件(.xls)|*.xls|Excel⽂件(.xlsx)|*.xlsx";//展⽰对话框ofd.ShowDialog();//获得在打开对话框中选中的⽂件的路径string filePath = ofd.FileName;//全路径return filePath;}/// <summary>/// 判断Excel⽂件是否为兼容模式(.xls)/// </summary>/// <param name="filePath"></param>/// <returns></returns>public static bool GetIsCompatible(string filePath){return filePath.EndsWith(".xls", StringComparison.OrdinalIgnoreCase);}/// <summary>/// 创建⼯作薄/// </summary>/// <param name="isCompatible">true就是.xls</param>/// <returns></returns>public static IWorkbook CreateWorkbook(bool isCompatible){if (isCompatible){return new HSSFWorkbook();}else{return new XSSFWorkbook();}}/// <summary>/// 创建⼯作薄(依据⽂件流)/// </summary>/// <param name="isCompatible"></param>/// <param name="stream"></param>/// <returns></returns>public static IWorkbook CreateWorkbook(bool isCompatible, Stream stream) {if (isCompatible){return new HSSFWorkbook(stream);}else{return new XSSFWorkbook(stream);}}#region 传⼊⼀个⽂件路径,返回⼀个IWorkbook对象/// <summary>/// 传⼊⼀个⽂件路径,返回⼀个IWorkbook对象/// </summary>/// <param name="filepath"></param>/// <returns></returns>public static IWorkbook CreateWorkbook(string filepath){IWorkbook workbook = null;bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fs = File.Open(filepath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了workbook = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}return workbook;}#endregion#region 打开⼀个excel⽂件,设置单元格的值,再保存⽂件/// <summary>/// 打开⼀个excel⽂件,设置单元格的值,再保存⽂件/// </summary>/// <param name="ExcelPath"></param>/// <param name="sheetname"></param>/// <param name="column"></param>public static bool SetCellValue(String ExcelPath, String sheetname, int column, int row, String value) {bool returnb = false;try{IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(ExcelPath);using (FileStream fs = File.Open(ExcelPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了wk = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了//ISheet sheet = wk.GetSheet(sheetname);ISheet sheet = wk.GetSheetAt(0);ICell cell = sheet.GetRow(row).GetCell(column);cell.SetCellValue(value);using (FileStream fileStream = File.Open(ExcelPath,FileMode.OpenOrCreate, FileAccess.ReadWrite)){wk.Write(fileStream);fileStream.Close();}returnb = true;}catch (Exception){returnb = false;throw;}return returnb;}#endregion#region 打开⼀个⽂件,读取excel⽂件某个单元格的值(多少⾏,多少列)/// <summary>/// 打开⼀个⽂件,读取excel⽂件某个单元格的值(多少⾏,多少列)/// </summary>/// <param name="ExcelPath"></param>/// <param name="sheetname"></param>/// <param name="column"></param>/// <param name="row"></param>/// <returns></returns>public static String GetCellValue(string ExcelPath, String sheetname, int column, int row){String returnStr = null;try{IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(ExcelPath);using (FileStream fs = File.Open(ExcelPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了wk = ExcelHelper.CreateWorkbook(isCompatible, fs);fs.Close();}//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了//ISheet sheet = wk.GetSheet(sheetname);ISheet sheet = wk.GetSheetAt(0);ICell cell = sheet.GetRow(row).GetCell(column);returnStr = cell.ToString();}catch (Exception){returnStr = "Exception";throw;}return returnStr;}#endregion#region 打开⼀个⽂件,删除多少⾏以后的数据(是删除,不是清空数据)/// <summary>/// 打开⼀个⽂件,删除多少⾏以后的数据(是删除,不是清空数据)/// </summary>/// <param name="fileMatchPath"></param>/// <param name="rowIndex">从多少⾏后开始删除</param>public static void DelRowsData(string fileMatchPath, int startRowIndex){IWorkbook wk = null;bool isCompatible = ExcelHelper.GetIsCompatible(fileMatchPath);using (FileStream fs = File.Open(fileMatchPath, FileMode.Open,FileAccess.Read, FileShare.ReadWrite)){//把xls⽂件读⼊workbook变量⾥,之后就可以关闭了ISheet sheet = wk.GetSheetAt(0);for (int i = startRowIndex; i <= stRowNum; i++){if (sheet.GetRow(i) == null){i++;continue;}sheet.RemoveRow(sheet.GetRow(i));}//转为字节数组MemoryStream stream = new MemoryStream();wk.Write(stream);var buf = stream.ToArray();//保存为Excel⽂件这种⽅式能保存.xls和.xlsx⽂件using (FileStream fs = new FileStream(fileMatchPath, FileMode.Create, FileAccess.Write)){fs.Write(buf, 0, buf.Length);fs.Flush();}}#endregion/// <summary>/// 创建表格头单元格/// </summary>/// <param name="sheet"></param>/// <returns></returns>private static ICellStyle GetCellStyle(IWorkbook workbook){ICellStyle style = workbook.CreateCellStyle();style.FillPattern = FillPattern.SolidForeground;style.FillForegroundColor = NPOI.HSSF.Util.HSSFColor.Grey25Percent.Index;return style;}/// <summary>/// 遍历打印⼆维数组/// </summary>/// <param name="array"></param>public static void PrintTwoArrayTest(object[,] array){Console.WriteLine("============测试打印⼆维数组==============");int row = array.GetLength(0);int column = array.GetLength(1);for (int r = 0; r < row; r++){for (int c = 0; c < column; c++){if (array[r, c] != null){string value = array[r, c].ToString();Console.Write($"{value} |");}}Console.WriteLine();}}/// <summary>/// 传⼊2个⼆维数组,进⾏条件匹配替换,返回替换后的⼀个⼆维数组/// </summary>/// <param name="refArray">参考的数组</param>/// <param name="matchArray">带替换的数组</param>/// <param name="refColumn01">参考列1</param>/// <param name="refColumn02">参考列2</param>/// <param name="refColTarget01">被复制的值的列1</param>/// <param name="matchColumn01">带替换的参考列1</param>/// <param name="matchColumn02">带替换的参考列2</param>/// <param name="matchColTarget01">带粘贴的值的列1</param>/// <returns></returns>public static string[,] GetMatchArray(string[,] refArray, string[,] matchArray, int refColumn01, int refColumn02, int refColTarget01, int matchColumn01, int matchColumn02, int matchColTarget01) {Console.WriteLine("============遍历2个⼆维数,匹配替换==============");int row = refArray.GetLength(0);int column = matchArray.GetLength(1);int row02 = matchArray.GetLength(0);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = refArray[r, refColumn01];//第1列的数据string value02 = refArray[r, refColumn02];//第2列的数据if (value01 != null && value02 != null){if (value01.Length > 0 | value02.Length > 0){for (int r02 = 0; r02 < row02; r02++){{matchArray[r02, matchColTarget01] = refArray[r, refColTarget01];iMatch++;Console.WriteLine($"匹配了{iMatch}次");}}}}}return matchArray;}/// <summary>/// 传⼊2个数组,根据相同条件匹配,吧ref的⽬标写⼊match中/// </summary>/// <param name="refArray">参考的数组</param>/// <param name="matchArray">带替换的数组</param>/// <param name="refColumn01"></param>/// <param name="refColTarget01"></param>/// <param name="matchColumn01"></param>/// <param name="matchColTarget01"></param>/// <returns></returns>public static string[,] GetMatchArray(string[,] refArray, string[,] matchArray, int refColumn01, int refColTarget01, int matchColumn01, int matchColTarget01) {Console.WriteLine("============遍历2个⼆维数,匹配替换==============");int row = refArray.GetLength(0);int column = matchArray.GetLength(1);int row02 = matchArray.GetLength(0);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = string.Empty;value01 = refArray[r, refColumn01];//遍历第⼀个数组第1列的数据//value01 = value01.Trim();if (value01 != null){if (value01.Length > 0){for (int r02 = 0; r02 < row02; r02++){string match01 = string.Empty;match01 = matchArray[r02, matchColumn01];//遍历第⼀个数组第1列的数据//match01 = match01.Trim();if (value01 == match01){matchArray[r02, matchColTarget01] = refArray[r, refColTarget01];iMatch++;Console.WriteLine($"匹配了{iMatch}次");}}}}}return matchArray;}/// <summary>/// 遍历⼀个数组,如果第⼆列的数值⼤于等于第⼀列的数值,替换字符串/// </summary>/// <param name="matchArray"></param>/// <param name="refColumn01"></param>/// <param name="refColumn02"></param>/// <param name="sValue"></param>/// <returns></returns>public static string[,] GetMatchArray(string[,] matchArray, int refColumn01, int refColumn02, string sValue){Console.WriteLine("============遍历2个⼆维数,匹配替换==============");int row = matchArray.GetLength(0);int column = matchArray.GetLength(1);int iMatch = 0;for (int r = 0; r < row; r++){string value01 = matchArray[r, refColumn01];//第1列的数据string value02 = matchArray[r, refColumn02];//第2列的数据try{int i01 = Convert.ToInt32(value01);int i02 = Convert.ToInt32(value02);if (i01 >= i02){matchArray[r, refColumn02] = sValue + $"(数量:{value02})";}}catch{}}return matchArray;}#region 打开excel⽂件,获取某⼀⾏的数据/// <param name="filepath">⽂件全路径</param>/// <param name="iRow">哪⼀⾏的数据</param>/// <param name="sheet_Number">哪⼀个sheet表</param>/// <returns></returns>public static ArrayList GetRowData(string filepath, int sheet_Number, int iRow){ArrayList arrayList = new ArrayList();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < stCellNum; c++){//获取每个单元格(r⾏c列的数据)ICell cell = currentRow.GetCell(c);//获取单元格的内容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果单元格为空,这⾥会报错的arrayList.Add(value);}}return arrayList;}}#endregion/// <summary>/// 打开excel⽂件,根据某⼀⾏的数据,根据字符串内容,返回这个字符串所在的列的索引/// </summary>/// <param name="filepath"></param>/// <param name="iRow"></param>/// <param name="sheet_Number">从1开始的</param>/// <param name="s1">注意字符串的顺序</param>/// <param name="s2"></param>/// <param name="s3"></param>/// <returns></returnsspublic static ArrayList GetDataIndexs(string filepath, int sheet_Number, int iRow, string s1, string s2, string s3) {ArrayList arrayList = new ArrayList();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < stCellNum; c++){//获取每个单元格(r⾏c列的数据)ICell cell = currentRow.GetCell(c);//获取单元格的内容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果单元格为空,这⾥会报错的if (value == s1 | value == s2 || value == s3){arrayList.Add(c);}}}Console.WriteLine("==========测试打印索引值============");foreach (var a in arrayList){Console.WriteLine($"{a} |");}return arrayList;}}/// <summary>/// 打开excel⽂件,根据某⼀⾏的字符串,然后这个字符串所在列的索引/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number"></param>/// <param name="iRow"></param>/// <param name="sValue"></param>/// <returns></returns>public static int GetDataIndex(string filepath, int sheet_Number, int iRow, string sValue){int i = 0;bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < stCellNum; c++){//获取每个单元格(r⾏c列的数据)ICell cell = currentRow.GetCell(c);value = cell.ToString(); //如果单元格为空,这⾥会报错的if (value == sValue){i = c;}}}}return i;}/// <summary>/// 打开⼀个⽂件,把第⼏⾏的数据取出来,返回⼀个字典单元格的值:列的索引/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number">第⼏张⼯作表(从1开始)</param>/// <param name="iRow">第⼏⾏(从1开始)</param>/// <returns></returns>public static Dictionary<string, int> GetDataDictionary(string filepath, int sheet_Number, int iRow){Dictionary<string, int> DataDict = new Dictionary<string, int>();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);IRow currentRow = sheet.GetRow(iRow - 1);for (int c = 0; c < stCellNum; c++){//获取每个单元格(r⾏c列的数据)ICell cell = currentRow.GetCell(c);//获取单元格的内容string value = string.Empty;if (cell != null){value = cell.ToString(); //如果单元格为空,这⾥会报错的if (!DataDict.ContainsKey(value)){if (value == "*预计交货⽇期" | value == "预计交货⽇期"){value = "*预计交货⽇期";}DataDict.Add(value, c);}else{if (filepath.Contains("销售订单")) //销售订单模板的第⼆个备注填写收货地址{if (value == "备注") //如果有两个备注{//DataDict.Add("采购员", c);DataDict.Add("收货地址", c);}}}}}//Console.WriteLine("================开始遍历字典===============");//foreach (KeyValuePair<string, int> kv in DataDict)//通过KeyValuePair遍历元素//{// Console.WriteLine($"Key:{kv.Key},Value:{kv.Value}");//}return DataDict;}}/// <summary>/// 打开⼀个⽂件,根据第⼏张表第⼏⾏的中的两个字符,返回值:⼀个字典/// </summary>/// <param name="filepath"></param>/// <param name="sheet_Number"></param>/// <param name="strColumnKey"></param>/// <param name="strColumnValue"></param>/// <returns></returns>public static Dictionary<string, string> GetDataDictionary(string filepath, int sheet_Number, int iRow, string strColumnKey, string strColumnValue) {Dictionary<string, int> dic = GetDataDictionary(filepath, 1, iRow);int iColumnKey = dic[strColumnKey];int iColumnValue = dic[strColumnValue];Dictionary<string, string> DataDict = new Dictionary<string, string>();bool isCompatible = ExcelHelper.GetIsCompatible(filepath);using (FileStream fsRead = File.OpenRead(filepath)){IWorkbook workbook = ExcelHelper.CreateWorkbook(isCompatible, fsRead);ISheet sheet = workbook.GetSheetAt(sheet_Number - 1);for (int i = 0; i <= stRowNum; i++)ICell cellKey = rowdata.GetCell(iColumnKey);//如果rowdata是null,这⾥报错ICell cellValue = rowdata.GetCell(iColumnValue);if (cellKey != null && cellValue != null){if (!DataDict.ContainsKey(cellKey.ToString())){string strCellKey = cellKey.ToString();string strCellValue = cellValue.ToString();DataDict.Add(strCellKey, strCellValue);}}}}return DataDict;}}/// <summary>/// ⾃适应列宽/// </summary>/// <param name="sheet"></param>/// <param name="cols"></param>public static void AutoColumnWidth(ISheet sheet, int cols){for (int col = 0; col <= cols; col++){sheet.AutoSizeColumn(col);//⾃适应宽度,但是其实还是⽐实际⽂本要宽int columnWidth = sheet.GetColumnWidth(col) / 256;//获取当前列宽度for (int rowIndex = 1; rowIndex <= stRowNum; rowIndex++){IRow row = sheet.GetRow(rowIndex);ICell cell = row.GetCell(col);if (cell != null){int contextLength = Encoding.UTF8.GetBytes(cell.ToString()).Length;//获取当前单元格的内容宽度 columnWidth = columnWidth < contextLength ? contextLength : columnWidth;}}sheet.SetColumnWidth(col, columnWidth * 200);//经过测试200⽐较合适。

在web中js实现类似excel的表格控件

在web中js实现类似excel的表格控件

在web中js实现类似excel的表格控件Execl功能⾮常强⼤,内置的很多函数或公式可以⼤⼤提⾼对数据的加⼯处理能⼒。

那么在web中有没有类似的控件呢?经过⼀番搜寻,发现handsontable具备了基本的excel功能⽀持公式,同时能对数据进⾏实时编辑。

另外⽀持拖动复制、Ctrl+C 、Ctrl+V 等等。

在浏览器⽀持⽅⾯,它⽀持以下的浏览器: IE7+, FF, Chrome, Safari, Opera。

⾸先引⼊相关库⽂件,公式⽀持不包含在handsontable.full.js中,需要单独引⼊:<script src="http://handsontable.github.io/handsontable-ruleJS/lib/jquery/jquery-1.10.2.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/handsontable/handsontable.full.js"></script><link rel="stylesheet" media="screen" href="http://handsontable.github.io/handsontable-ruleJS/lib/handsontable/handsontable.full.css"><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/lodash/lodash.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/underscore.string/underscore.string.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/moment/moment.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/numeral/numeral.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/numericjs/numeric.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/js-md5/md5.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/jstat/jstat.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/lib/formulajs/formula.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/js/parser.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/RuleJS/js/ruleJS.js"></script><script src="http://handsontable.github.io/handsontable-ruleJS/lib/handsontable/handsontable.formula.js"></script>在HTML中放置⼀个Div容器来存放handsontable控件:<body><div id="handsontable-code"></div></body>在javascript代码中,⾸先获取div容器,然后创建表格控件:<script type="text/javascript">$(document).ready(function () {var data1 = [['=$B$2', "Maserati", "Mazda", "return 1+2;", 'return DataAccess.getScalar("select top 1 name from Cloud_Users where cellPhone=158********");', "=A$1"], [2009, 0, 2941, 4303, 354, 5814],[2010, 5, 2905, 2867, '=SUM(A4,2,3)', '=$B1'],[2011, 4, 2517, 4822, 552, 6127],[2012, '=SUM(A2:A5)', '=SUM(B5,E3)', '=A2/B2', 12, 4151]];function negativeValueRenderer(instance, td, row, col, prop, value, cellProperties) {Handsontable.renderers.TextRenderer.apply(this, arguments);var escaped = Handsontable.helper.stringify(value),newvalue;if (escaped.indexOf('return') === 0) {//计算列为只读//cellProperties.readOnly = true;td.style.background = '#EEE';newvalue = document.createElement('span');$.ajax({//提交数据的类型 POST GETtype: "POST",//提交的⽹址url: "/services/CSEngine.ashx",//提交的数据data: { code: value, code2: escaped },//返回数据的格式datatype: "html",//"xml", "html", "script", "json", "jsonp", "text".//在请求之前调⽤的函数//beforeSend: function () { $("#msg").html("logining"); },//成功返回之后调⽤的函数success: function (data) {// $("#msg").html(decodeURI(data));newvalue.innerHTML = decodeURI(data);},//调⽤执⾏后调⽤的函数complete: function (XMLHttpRequest, textStatus) {//alert(XMLHttpRequest.responseText);// alert(textStatus);//HideLoading();},//调⽤出错执⾏的函数error: function () {//请求出错处理// alert('error')}});Handsontable.Dom.addEvent(newvalue, 'mousedown', function (e) {e.preventDefault(); // prevent selection quirk});Handsontable.Dom.empty(td);td.appendChild(newvalue);}// if row contains negative numberif (parseInt(value, 10) < 0) {// add class "negative"td.className = 'negative';}}//类似excel进⾏拖放,公式会变var container1 = $('#handsontable-code');Handsontable.renderers.registerRenderer('negativeValueRenderer', negativeValueRenderer);container1.handsontable({data: data1,minSpareRows: 1,colHeaders: true,rowHeaders: true,contextMenu: true,manualColumnResize: true,formulas: true,cells: function (row, col, prop) {var cellProperties = {};var escaped = Handsontable.helper.stringify(this.instance.getData()[row][col]);if (escaped.indexOf('return')===0) {cellProperties.renderer = "negativeValueRenderer";}return cellProperties;}});});</script>其中 =SUM(B5,E3)的公式是RuleJs提供的,return 1+2是⾃⼰实现的C#代码脚本,需要单击解析:public class CSEngine : IHttpHandler {private static int count = 0;public void ProcessRequest (HttpContext context) {context.Response.ContentType = "text/plain";try{count++;string ret = "";string code = context.Request["code"].ToString();if (string.IsNullOrEmpty(code)){ret = "参数错误";}else{ScriptOptions options = ScriptOptions.Default.AddReferences(Assembly.GetAssembly(typeof(DBServices.DataAccess)))//.AddImports("System.Data")//.AddImports("System.Data.SqlClient").AddImports("DBServices");var state = CSharpScript.RunAsync(code, options).Result.ReturnValue;ret = state.ToString();state = null;options = null;}Console.WriteLine(count);context.Response.Write(ret);}catch(Exception ex){//errorConsole.WriteLine(count);}}public bool IsReusable {get {return false;}}}运⾏代码,如下:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于GridView控件仿EXCEL格式显示数据的网页制作谭东清海南职业技术学院海南海口570216摘要:本文通过一个实用的网页实例,深入探讨的GridView控件模仿EXCEL格式显示数据的网页制作思路与实现过程,介绍了GridView控件在冻结窗格、合并单元格、自动编号和自定义分页控件等功能的编程技巧。

关键词GridView、冻结窗格、合并单元格、自动编号imitation EXCEL format data Webpage making based on GridView controltan dong qingHainan College of V ocation and Technique Hainan Haikou 570216Abstract:In this paper, by a practical example Webpage, in-depth study GridView controls to imitate EXCEL format data Webpage making ideas and implementation process, introduces the GridView control in the freeze panes, merge cells, the automatic numbering and custom paging controls functional programming skills. Keywords:GridView control, freeze panes, merge cells, Automatic numbering1 引言GridView是中功能强大的数据绑定控件,它可以让用户按照自己的需要控制数据的显示格式,除了控件自身提供的排序、更新和删除数据缓存等功能外,还可以通过手动编码的形式实现GridVeiw控件的高级数据绑定。

为了更好的推进顶岗实习工作,实现对顶岗实习的有效管理,我根据经济管理学院的要求开发了一个顶岗实习管理系统,通过该系统实现对学生的顶岗实习的各项数据收集、统计和分析,提高了学生顶岗实习管理的质量。

下面通过该系统中的学生实习报告查阅页面,深入解析使用GridView控件仿EXCEL格式呈现数据的方法与实现,对的开发者具有一定的参考价值。

2 网页效果本文制作的查阅学生实习报告的网页效果如图1所示,网页浏览效果类似于EXCEL的冻结窗格功能,即将报告列表的左边两列固定,剩下的右边列内容通过滚动条移动查看,点击翻页时,数据序号自动按顺序递增编号,每一次报告标题都合并了相关的数据单元格,使得数据结构清晰,查阅非常方便。

图1 网页实例3 设计思路要实现以上网页数据浏览的功能,需求对GridView控件应用有比较深入的了解,本实例的设计思路如下:(1).类似EXCEL的冻结窗格功能是通过两个GridView控件来实现的。

(2).为了提高代码的重用性和易用性,网页采用了编写代码的方式将数据库数据绑定到GridView控件。

(3).为了增强GridView控件的分页功能和能更方便的通过样式美化分页按钮,网页使用了第三方分页控件AspNetPager。

该控件相对来说使用简单,不需要编写复杂的分页代码,而且功能齐全。

(4).通过TableHeaderCell类实现合并单元格的编程技巧。

(5).由于默认的GridView控件显示信息时无法给绑定的数据行自动编号,所以给GridView控件添加一个模板列,在该模板列插入一个Lable控件,通过代码编程给Lable控件赋值实现数据行自动编号。

4 技术实现4.1 页面设计在xueshengbaogao.aspx网页文件中,主要的网页设计对象是GridView控件和自定义分布控件。

首先添加两个GridView控件,一个控件显示“序号和姓名”两列,另一个控件显示剩余的列数据。

将两个GridView控件分别放在两个<div>标签中。

通过设置GridView控件的大小和给这两个<div>标签设置相应的样式,即可实现“序号和姓名”两列数据位置固定,其它的列可通过滚动条查看的效果。

两个<div>标签的样式设置如下:#xsbb_left {float: left;width: 100px;margin-right:0px}#xsbb_right {overflow: auto; float: left;width: 920px; margin-left:0px}然后添加自定义分页控件。

如果分页控件事先已添加到控件选项卡,则从控件选项卡将分页控件图标拖放到GridView控件下面,将网页切换到源代码视图,把新添加的分页控件代码修改成如下代码,再设置样式,即可得到很美观的分页按钮效果。

<webdiyer:aspnetpager id="AspNetPager1"runat="server"horizontalalign="Center"CssClass="anpager" CurrentPageButtonClass="cpb"onpagechanged="AspNetPager1_PageChanged"FirstPageText="首页"LastPageText="尾页"NextPageText="下一页"PrevPageText="上一页"RecordCount="228"width="100%"UrlPaging="True"> </webdiyer:aspnetpager>4.2 分页数据绑定在xueshengbaogao.aspx.cs代码文件中,为了增强GridView控件的分页功能,使用了AspNetPager自定义分页控件与之配合使用,因此在给GridView控件绑定数据时需要用到PagedDataSource 类。

PagedDataSource 类封装了允许数据源控件执行分页操作的属性。

在数据绑定过程中,DataSet数据源首先将数据赋给PagedDataSource,然后再由PagedDataSource将数据赋给GridView控件,PagedDataSource对象充当一个数据中转站。

数据绑定主要代码如下所示:string ChaXun_str = Session["BaoGao_ChaXun"].ToString();DataSet MyDataNum = DbHelperSql.GetDataSet(ChaXun_str);int totalNum = MyDataNum.Tables[0].Rows.Count;PagedDataSource pds = new PagedDataSource();pds.AllowPaging = true;pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;DataSet MyData1 = DbHelperSql.GetDataSet(ChaXun_str);pds.DataSource = MyData1.Tables[0].DefaultView;AspNetPager1.RecordCount = totalNum;本页面数据读取主要是根据班级列表控件的值作为参数进行查询,将查询语句先赋值给Session["BaoGao_ChaXun"]变量再赋给字符串变量ChaXun_str,然后再在方法中传递变量,如DbHelperSql.GetDataSet(ChaXun_str),其目的是避免翻页时,查询语句参数值(如班级列表控件的值)发生变化而使得查询到的数据不正确。

另外,使用AspNetPager自定义分页控件,代码中还需要有AspNetPager1_PageChanged(object src, EventArgs e)这个方法,否则程序就会报错。

4.3 合并单元格对于模仿Excel格式显示网页信息的其中一个主要表现就是对GridView控件的头部进行了合并单元格和单元格背景颜色设置,这个功能是通过GridView_RowCreated()事件编程实现的。

从图2上来看,报告信息表头由2行组成,其中第一行每一次报告的单元格是合并了3个小的单元格,而且单元格之间的颜色交替变换。

两个GridView控件创建头部的方法相似,这里以GridView2_RowCreated( )为例讲讲学生报告信息表头的创建方法。

图2 报告信息表头在GridView2_RowCreated( )事件中首先使用switch ( )函数的case语句判断如果是创建GridView控件的标题行,则创建一个单元格集合tcHeader。

即“TableCellCollection tcHeader = e.Row.Cells;”语句。

然后再用2个for循环语句生成头部单元格。

第1个for循环语句条件是从n=0开始到6结束,共7个单元格,存放7次报告的标题,即本实例网页共显示学生提交的报告数是7次。

if函数中的条件n%2==0是为了判定新增加的单元格的奇偶数,以便给他们设置不同的背景颜色。

当条件n=6时是第一行的最后一个单元格,需要另外单独设置行结束标签,即给该单元格设置有别于其它单元格的属性,语句是tcHeader[n].Text = "总结报告</th></tr><tr>",因此嵌套一个if函数判断如果是第一行第6个单元格,则设置该单元格Text属性为"总结报告</th></tr><tr>"。

另外由于单元格集合tcHeader的第一个单元格是从tcHeader[0]开始的,但报告标题的序号是用“第1、2……次报告”表示的,所以用一个变量m来表示报告序号,其中m=n+1,相关语句是tcHeader[n].Text = "第" + m + "次报告"。

第2个for函数的语句是生成第二行的单元格,i从7开始是因为接着第一行的第6个单元格继续的。

第二行共21个单元格,每3个一组,因此该for函数的条件设置为“i = 7; i <= 27; i=i+3 ”,每3组的文本属性相同,背景颜色设置为交替变换的颜色。

相关文档
最新文档