直接先上效果图看看先。
首先简单说明一下,后面会给所涉及到的代码都贴上来的。
1.Excel图标是一个用户控件,用来触发下载
2.首页、上页......每页多少条,这一块是一个整体,你可以选择放置在表格下面,或者表格上面都可以
3.表格则也是单独的一个,自己任意设置位置
4.复选框是否显示,自己设置,并可设置绑定的值,并有自带的方法可供你用于获取选中的复选框的对象跟值
5.表格的单行、双行、点击、悬浮、标题栏、表格的样式,都可以通过设置参数来修改,图为自带的效果
6.分页默认每页10行,分页的检测、复选框选择的检测,都已封装好
7.每页显示的数量、以及跳转到第几页的事件也都已经写好
8.关于导出按钮的数据导出功能,数据查询的时候,将数据绑定到用户控件中,而导出按钮则用来检测是否有复选框,如果有复选框,则用来先检测用户选中的进行拼接导出
功能大概就上面这些了吧,先给调用的方法贴上来。
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CommonTable.aspx.cs" Inherits="ChildrenPageFolder_CommonTable" %><%@ Register TagPRefix="uc" TagName="tn_export" Src="~/UserControl/DataExport.ascx" %><!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 runat="server"> <title>添加表格</title> <script src="../js/CommonHtmlOperation.js" type="text/Javascript"></script> <script language="javascript" type="text/javascript"> function PageInfoEvent() { var sql = "select count(*) from camera_fault t"; var sqlQueryCount = ChildrenPageFolder_CommonTable.GetFaultCount(sql).value; // 从后台获取一个总数 CommonJS.HtmlTableOperation.LoadPageTool("div_PageInfo", sqlQueryCount, TableDataEvent); // 调用分页加载的方法,传入:divID,总数,回调函数 } function TableDataEvent(nowPage) { var sql = "select * from camera_fault t"; var dt = ChildrenPageFolder_CommonTable.GetFault(sql, nowPage, CommonJS.HtmlTableOperation.ShowItemCount).value; // 从后台获取数据,DataTable类型 // 设置显示的列名,每一列绑定的值 CommonJS.HtmlTableOperation.Fields = ["CF_TYPE:故障类型", "CF_CREATEUSERNAME:申报人姓名", "CF_CREATEUSERID:申报人ID", "CF_CREATETIME:申报时间"]; CommonJS.HtmlTableOperation.SetCheckbox(true, "CF_CAMERAID"); // 设置是否显示复选框,以及复选框绑定那个列,传数据库的列名进去 // 绑定行事件 // CommonJS.HtmlTableOperation.trClickFun = trC; // CommonJS.HtmlTableOperation.trDblclickFun = trC; // CommonJS.HtmlTableOperation.trMouseFun = trC; // CommonJS.HtmlTableOperation.trOutFun = trC; CommonJS.HtmlTableOperation.LoadData("div_TableData", dt); // 加载数据。传递 divID 以及 DataTable } // 获取用户选中的复选框的value值 function GetCheckedValue() { CommonJS.HtmlTableOperation.GetCheckedValue("div_TableData"); } // 行的方法,返回行对象 function trC(obj) { alert(obj.innerHTML); } </script></head><body onload="PageInfoEvent();TableDataEvent(1);"> <form id="form1" runat="server"> <uc:tn_export runat="server" ID="uc_export" /> <div id="div_PageInfo"> </div> <div id="div_TableData"> </div> </form></body></html>
简单说说代码的调用:1.自己定义好两个div,一个用户控件。两个div呢,一个是放置上一页下一页的位置,另外一个div则用来放置table的位置,至于用户控件,放上来之后,可以隐藏,也可以显示,这个随意。
2.PageInfoEvent的三行代码,只需要理解第三行代码就够了,第二行的代码通过Ajax从后台获取一个总数。而第三行代码则是调用封装的封装代码,你需要传入三个参数,一个参数是分页按钮显示的div的ID,之后就是总数,最后一个是回调函数,该回调函数是用来当分页触发之后调用的方法,封装的方法会返回一个页数回来。
3.TableDataEvent事件中,获取页数。从后台查询该页的数据
之后里面有各种参数设置,比如:显示的列名、每个列对应绑定的数据列、是否显示复选框、复选框绑定哪个列、设置每页显示的数量、行的单击双击悬浮离开事件的绑定、表格的颜色,皆可自定义设置,当然,你若不设置,也都可以,都有默认值。
4.此处需要注意的是:数据类型暂时限制了C#中的DataTable类型,因为现有的项目全是这个类型的,所以先用这个数据类型来写这个例子,如果要用其它类型,自己改代码
5.后面还有两个方法,一个是GetCheckedValue,是获取用户选中的值。TrC呢,是在加载table数据的时候,你绑定了回调方法,那么就在回调的时候,将当前行的对象返回给你自定义
下面是自己封装好的JS方法了
/// <summary>/// table 控件操作方式/// <summary>var CommonJS = {};CommonJS.HtmlTableOperation = (function () { /// <summary> /// 静态公有方法跟属性 /// <summary> var TableEvent = { // 表格涉及到的样式 tableCSS: "font-size:13px;", trTitleCss: "text-align:center; COLOR: white; BACKGROUND-COLOR: #5d7b9d;", trCss1: "color: #000000;background-color: #ffffee;", trCss2: "color: #993300;background-color: #ffffaa;", trMouseCss: "color: #123456;background-color: #eaa;", trClickCss: "color: white;background-color: #6060F4;", /// <summary> /// 设置需要初始化的变量 /// <summary> Fields: new Array(), // 需要显示的字段,表列名 DispField: new Array(), // 需要显示的字段,中文名 ShowItemCount: 10, // 设置每页显示的数量 // 是否显示复选框以及复选框绑定的字段 IsShowCheckbox: false, CheckboxField: "", SetCheckbox: function (isShow, field) { this.IsShowCheckbox = isShow; this.CheckboxField = field; }, trClickFun: null, trDblclickFun: null, trMouseFun: null, trOutFun: null, /// <summary> /// 加载表格数据 /// <summary> LoadData: function (divId, dt) { if (dt != null && dt != undefined) { document.getElementById(divId).innerHTML = ""; var excelHead = ""; var excelBody = ""; // 整理好显示的列 if (this.Fields.length == 0) { for (var i = 0; i < dt.Columns.length; i++) { this.DispField.push(dt.Columns[i].Name); } this.Fields = this.DispField; } else { var temFields = new Array(); var temDispField = new Array(); for (var i = 0; i < this.Fields.length; i++) { temFields.push(this.Fields[i].split(":")[0]); temDispField.push(this.Fields[i].split(":")[1]); } this.Fields = temFields; this.DispField = temDispField; } // 确定是否需要显示复选框 var td_ckAll = null; var ck_CheckboxAll = null; var ck_checkboxIdAll = tableCheckboxAllId = divId + "_CheckboxAll"; var ck_checkboxItemName = tableCheckboxItemName = divId + "_CheckboxItem"; if (this.IsShowCheckbox) { ck_CheckboxAll = CreateElement("input"); ck_CheckboxAll.type = "checkbox"; ck_CheckboxAll.title = "全选/全不选"; ck_CheckboxAll.id = ck_checkboxIdAll; ck_CheckboxAll.setAttribute("checkboxItemName", ck_checkboxItemName); ck_CheckboxAll.onclick = function (e) { TableCheckboxCheckAll(this); } td_ckAll = CreateElement("td"); td_ckAll.appendChild(ck_CheckboxAll); } // 创建表格的标题行 var thead = CreateElement("thead"); var thead_tr = CreateElement("tr"); thead_tr.style.cssText = this.trTitleCss; if (this.IsShowCheckbox) { thead_tr.appendChild(td_ckAll); } for (var i = 0; i < this.DispField.length; i++) { var thead_tr_td = CreateElement("td"); thead_tr_td.innerHTML = this.DispField[i]; thead_tr.appendChild(thead_tr_td); excelHead += this.DispField[i] + "/t"; } thead.appendChild(thead_tr); // 创建表格的数据行 var tbody = CreateElement("tbody"); for (var i = 0; i < dt.Rows.length && i < this.ShowItemCount; i++) { var tbody_tr = CreateElement("tr"); var tr_titleMsg = ""; if (this.IsShowCheckbox) { // 复选框 var ck_CheckboxItem = CreateElement("input"); ck_CheckboxItem.type = "checkbox"; ck_CheckboxItem.id = ck_checkboxItemName; ck_CheckboxItem.name = ck_checkboxItemName; ck_CheckboxItem.setAttribute("checkboxAllId", ck_checkboxIdAll); ck_CheckboxItem.value = dt.Rows[i][this.CheckboxField] == undefined ? "" : dt.Rows[i][this.CheckboxField];
新闻热点
疑难解答