使用FlexiGrid实现Extjs表格效果方法分享


Posted in Javascript onDecember 16, 2014

近一段时间Extjs真的是风光无限好,只要是个做CRM/HRM之类的企业现在都在琢磨怎么在项目中用它,不过兄弟我可是不敢,原因很简单:太大/太笨/源码不好调试。但是对于Extjs漂亮的表格与功能的强大,实在是让我垂涎三尺,记得以前有个老外同志写过一个类似的Extjs的Jquery插件,所以就在Jquery的插件海洋中一顿海找,呵呵,还真让我找到了。看来还是我的Jquery好,小巧简单好像一部好的汽车引擎,我想要什么就可以自已DIY,真是方便。总体方案在网络传输上不超过80KB,速度比500KB大小的Extjs不知道要小上多少哪。。。

使用FlexiGrid实现Extjs表格效果方法分享

使用FlexiGrid实现Extjs表格效果方法分享

下载地址:http://code.google.com/p/flexigrid/

不过由于FlexiGrid在互联网上的大部分资料都是用PHP或者java写的,所以兄弟简单的对它进行了改制,也做了一个山寨版的Extjs表格实现,希望对大家有帮助。

基本使用:

使用FlexiGrid实现Extjs表格效果方法分享

1 基本使用是非常简单的,只需要加入Jquery库与FlexiGrid的JS即可以对表格进行格式化与美化.

<link rel="stylesheet" type="text/css" href="css/flexigrid/flexigrid.css">

<script type="text/javascript" src="lib/jquery/jquery-1.2.6.min.js"></script>

<script type="text/javascript" src="flexigrid.pack.js"></script>

<%--<script type="text/javascript" src="lib/jquery/jquery-1.2.6-vsdoc-cn.js"></script>--%>

<script type="text/javascript">

    $("document").ready(function() {

    $('#flexme1').flexigrid();

    $('#flexme2').flexigrid();

    });

</script>

2 加入需要格式化的表格即可

<h1>

     最简单的flexigrid表格-1</h1>

 <table id="flexme1">

     <thead>

         <tr>

             <th width="100">

                 Col 1

             </th>

             <th width="100">

                 Col 2

             </th>

             <th width="100">

                 Col 3 is a long header name

             </th>

             <th width="300">

                 Col 4

             </th>

         </tr>

     </thead>

     <tbody>

         <tr>

             <td>

                 This is data 1 with overflowing content

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

     </tbody>

 </table>

 <p>

 </p>

 <h1>

     最简单的flexigrid表格-2</h1>

 <table id="flexme2">

     <thead>

         <tr>

             <th width="100">

                 Col 1

             </th>

             <th width="100">

                 Col 2

             </th>

             <th width="100">

                 Col 3 is a long header name

             </th>

             <th width="300">

                 Col 4

             </th>

         </tr>

     </thead>

     <tbody>

         <tr>

             <td>

                 This is data 1 with overflowing content

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

         <tr>

             <td>

                 This is data 1

             </td>

             <td>

                 This is data 2

             </td>

             <td>

                 This is data 3

             </td>

             <td>

                 This is data 4

             </td>

         </tr>

     </tbody>

 </table>

为了增加FlexiGrid的基本使用效果,我们可以通过参数对其进行基本的调整

自定义表头

使用FlexiGrid实现Extjs表格效果方法分享

具体代码实现:

<script type="text/javascript">

     $("document").ready(function() {

         $('#flexme1').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ]

         });

         $('#flexme2').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ],

             sortname: "iso",

             sortorder: "asc",

         });

     });

 </script>

自定义折叠,自定义排序的实现

使用FlexiGrid实现Extjs表格效果方法分享

<script type="text/javascript">

     $("document").ready(function() {

         $('#flexme1').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ], width: 700, height: 300, usepager: true, showTableToggleBtn: true, title: "点我折叠"

         });

         $('#flexme2').flexigrid({

             colModel: [

             { display: 'ISO', name: 'iso', width: 40, sortable: true, align: 'center' },

             { display: 'Name', name: 'name', width: 180, sortable: true, align: 'left' },

             { display: 'Printable Name', name: 'printable_name', width: 120, sortable: true, align: 'left' },

             { display: 'ISO3', name: 'iso3', width: 130, sortable: true, align: 'left', hide: true },

             { display: 'Number Code', name: 'numcode', width: 80, sortable: true, align: 'right' }

             ],

             searchitems: [

             { display: 'ISO', name: 'iso' },

             { display: 'Name', name: 'name', isdefault: true }

             ],

             sortname: "iso",

             sortorder: "asc",

             title: "我的测试效果",

             width: 700,

             height: 300,

             usepager: true, showTableToggleBtn: true, rp: 10

  

         });

     });

 </script>

高级使用:

使用FlexiGrid实现Extjs表格效果方法分享

1 分页用到的存储过程

Create PROCEDURE [dbo].[spAll_ReturnRows]

        (

            @SQL nVARCHAR(4000),

            @Page int,

            @RecsPerPage int,

            @ID VARCHAR(255),

            @Sort VARCHAR(255)

        )

        AS

        DECLARE @Str nVARCHAR(4000)

        SET @Str='SELECT   TOP '+

            CAST(@RecsPerPage AS VARCHAR(20))+

            ' * FROM ('+@SQL+') T WHERE T.'+

            @ID+

            ' NOT IN (SELECT   TOP '+

            CAST((@RecsPerPage*(@Page-1)) AS VARCHAR(20))+

            ' '+

            @ID+

            ' FROM ('

            +@SQL+

            ') T9 ORDER BY '+

            @Sort+

            ') ORDER BY '+

            @Sort

        PRINT @Str

        EXEC sp_ExecuteSql @Str

2 异步JSON数据传输实现

 using System;

 using System.Collections.Generic;

 using System.Configuration;

 using System.Data;

 using System.Data.SqlClient;

 using System.Linq;

 using System.Text;

 using System.Web;

 using System.Web.Services;

 using Newtonsoft.Json;

 namespace GridDemo

 {

     /// <summary>

     /// $codebehindclassname$ 的摘要说明

     /// </summary>

     [WebService(Namespace = "http://tempuri.org/")]

     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

     public class GetDataSource4 : IHttpHandler

     {

         public void ProcessRequest(HttpContext context)

         {

             context.Response.ContentType = "text/plain";

             //得到当前页

             string CurrentPage = context.Request["page"];

             //得到每页显示多少

             string PageShowLimit = context.Request["rp"];

             //得到主键

             string TableID = context.Request["sortname"];

             //得到排序方法

             string OrderMethod = context.Request["sortorder"];

             //得到要过滤的字段

             string FilterField = context.Request["qtype"];

             //得到要过滤的内容

             string FilterFieldContext;

             if (context.Request.Form["letter_pressed"] == null)

             {

                 FilterFieldContext = "";

             }

             else

             {

                 FilterFieldContext = context.Request["letter_pressed"];

             }

             //得到表的总行数

             string TableRowCount = SqlHelper.ExecuteScalar(ConfigurationManager.AppSettings["SQL2"],

                                     CommandType.Text,

                                     "select count(*) from Person.Address"

                                    ).ToString();

             //得到主SQL

             SqlParameter SQL = new SqlParameter("@SQL", SqlDbType.NVarChar);

             //SQL.Value = "SELECT  * FROM Person.Address";

             if (FilterFieldContext.Length == 0 || FilterField.Length == 0)

             {

                 SQL.Value = "SELECT  AddressID,AddressLine1,AddressLine2,PostalCode,City FROM Person.Address";

             }

             else

             {

                 string[] tmp = FilterField.Split(',');

                 SQL.Value = "SELECT  AddressID,AddressLine1,AddressLine2,PostalCode,City FROM Person.Address where " + tmp[0] + " like '" + FilterFieldContext + "%'";

             }

             SqlParameter Page = new SqlParameter("@Page", SqlDbType.Int);

             Page.Value = Convert.ToInt32(CurrentPage);

             SqlParameter RecsPerPage = new SqlParameter("@RecsPerPage", SqlDbType.Int);

             RecsPerPage.Value = Convert.ToInt32(PageShowLimit);

             SqlParameter ID = new SqlParameter("@ID", SqlDbType.VarChar);

             ID.Value = TableID;

             SqlParameter Sort = new SqlParameter("@Sort", SqlDbType.VarChar);

             Sort.Value = TableID;

             //得到表

             DataTable returnTable = SqlHelper.ExecuteDataset(ConfigurationManager.AppSettings["SQL2"],

                         CommandType.StoredProcedure, "spAll_ReturnRows",

                         new SqlParameter[]

                             {

                                 SQL,Page,RecsPerPage,ID,Sort

                             }).Tables[0];

             context.Response.Write(DtToSON2(returnTable, CurrentPage, TableRowCount));

         }

         /// <summary>

         /// JSON格式转换

         /// </summary>

         /// <param name="dt">DataTable表</param>

         /// <param name="page">当前页</param>

         /// <param name="total">总计多少行</param>

         /// <returns></returns>

         public static string DtToSON2(DataTable dt, string page, string total)

         {

             StringBuilder jsonString = new StringBuilder();

             jsonString.AppendLine("{");

             jsonString.AppendFormat("page: {0},\n", page);

             jsonString.AppendFormat("total: {0},\n", total);

             jsonString.AppendLine("rows: [");

             for (int i = 0; i < dt.Rows.Count; i++)

             {

                 jsonString.Append("{");

                 jsonString.AppendFormat("id:'{0}',cell:[", dt.Rows[i][0].ToString());

                 for (int j = 0; j < dt.Columns.Count; j++)

                 {

                     if (j == dt.Columns.Count - 1)

                     {

                         jsonString.AppendFormat("'{0}'", dt.Rows[i][j].ToString());

                     }

                     else

                     {

                         jsonString.AppendFormat("'{0}',", dt.Rows[i][j].ToString());

                     }

                     if (j == dt.Columns.Count - 1)

                     {

                         jsonString.AppendFormat(",'{0}'", "<input type=\"button\" value=\"查看\" id=\"sss\" onclick=\"sss(" + dt.Rows[i][0].ToString() + ")\" />");

                     }

                 }

                 jsonString.Append("]");

                 if (i == dt.Rows.Count - 1)

                 {

                     jsonString.AppendLine("}");

                 }

                 else

                 {

                     jsonString.AppendLine("},");

                 }

             }

             jsonString.Append("]");

             jsonString.AppendLine("}");

             return jsonString.ToString();

         }

         public bool IsReusable

         {

             get

             {

                 return false;

             }

         }

     }

 }

3 页面实现

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Complex-8.aspx.cs" Inherits="GridDemo.Complex_8" %>

 <!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>

     <link rel="stylesheet" type="text/css" href="/css/flexigrid/flexigrid.css" />

     <script type="text/javascript" src="/lib/jquery/jquery.js"></script>

     <script type="text/javascript" src="flexigrid.js"></script>

     <link type="text/css" rel="Stylesheet" href="facebox/facebox.css" />

     <link type="text/css" rel="Stylesheet" href="body.css" />

     <script type="text/javascript" src="facebox/facebox.js"></script>

     <script type="text/javascript">

         $("document").ready(function() {

             $("#flex1").flexigrid

             ({

                 url: 'GetDataSource4.ashx',

                 dataType: 'json',

                 colModel: [

                 { display: '地址ID', name: 'AddressID', width: 40, sortable: true, align: 'center' },

                 { display: '具体地址1', name: 'AddressLine1', width: 140, sortable: true, align: 'left' },

                 { display: '具体地址2', name: 'AddressLine2', width: 80, sortable: true, align: 'left' },

                 { display: '邮编', name: 'PostalCode', width: 80, sortable: true, align: 'left' },

                 { display: '城市', name: 'City', width: 80, sortable: true, align: 'left' },

                 { display: '操作', name: 'Opt', width: 80, sortable: true, align: 'left' }

                 ],

                 buttons: [

                 { name: 'A', onpress: sortAlpha },

                 { name: 'B', onpress: sortAlpha },

                 { name: 'C', onpress: sortAlpha },

                 { name: 'D', onpress: sortAlpha },

                 { name: 'E', onpress: sortAlpha },

                 { name: 'F', onpress: sortAlpha },

                 { name: 'G', onpress: sortAlpha },

                 { name: 'H', onpress: sortAlpha },

                 { name: 'I', onpress: sortAlpha },

                 { name: 'J', onpress: sortAlpha },

                 { name: 'K', onpress: sortAlpha },

                 { name: 'L', onpress: sortAlpha },

                 { name: 'M', onpress: sortAlpha },

                 { name: 'N', onpress: sortAlpha },

                 { name: 'O', onpress: sortAlpha },

                 { name: 'P', onpress: sortAlpha },

                 { name: 'Q', onpress: sortAlpha },

                 { name: 'R', onpress: sortAlpha },

                 { name: 'S', onpress: sortAlpha },

                 { name: 'T', onpress: sortAlpha },

                 { name: 'U', onpress: sortAlpha },

                 { name: 'V', onpress: sortAlpha },

                 { name: 'W', onpress: sortAlpha },

                 { name: 'X', onpress: sortAlpha },

                 { name: 'Y', onpress: sortAlpha },

                 { name: 'Z', onpress: sortAlpha },

                 { name: '%', onpress: sortAlpha }

                 ],

                 searchitems: [

                  { display: '城市', name: 'City' , isdefault: true},

                  { display: '邮编', name: 'PostalCode' }

                  ],

                 usepager: true,

                 title: '客户信息',

                 useRp: true,

                 rp: 10,

                 showTableToggleBtn: true,

                 width: 700,

                 height: 200,

                 rpOptions: [10, 15, 20, 25, 40, 60], //可选择设定的每页结果数

                 procmsg: '请等待数据正在加载中 …', //正在处理的提示信息

                 resizable: false, //是否可伸缩

                 sortname: "AddressID",

                 //sortorder: "asc",//此列由于存储过程原因无法用

             });

         });

         function sortAlpha(com) {

             jQuery('#flex1').flexOptions({ newp: 1, params: [{ name: 'letter_pressed', value: com }, { name: 'qtype', value: $('select[name=qtype]').val()}] });

             jQuery("#flex1").flexReload();

         }

         function sss(data)

         {

            var temp=eval(data);

 //           jQuery.facebox(temp);

            jQuery.facebox({ ajax: 'Default.aspx?id='+temp })

         }

     </script>

 </head>

 <body>

     <table>

     </table>

 </body>

 </html>
Javascript 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
IE下写xml文件的两种方式(fso/saveAs)
Aug 05 Javascript
Dojo Javascript 编程规范 规范自己的JavaScript书写
Oct 26 Javascript
node.js中的fs.writeFile方法使用说明
Dec 14 Javascript
jQuery多级弹出菜单插件ZoneMenu
Dec 18 Javascript
js获取数组的最后一个元素
Apr 14 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
jQuery ajax时间差导致的变量赋值问题分析
Jan 22 Javascript
javascript 广告移动特效的实现代码
Jun 25 Javascript
vue侧边栏动态生成下级菜单的方法
Sep 07 Javascript
关于React动态加载路由处理的相关问题
Jan 07 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
Nov 12 Javascript
jQuery+css实现百度百科的页面导航效果
Dec 16 #Javascript
jQuery+PHP打造滑动开关效果
Dec 16 #Javascript
javascript进行四舍五入方法汇总
Dec 16 #Javascript
javascript 判断整数方法分享
Dec 16 #Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 #Javascript
jquery队列函数用法实例
Dec 16 #Javascript
JQuery仿小米手机抢购页面倒计时效果
Dec 16 #Javascript
You might like
php编程每天必学之表单验证
2016/03/01 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
2009/12/15 Javascript
Dom在ajax技术中的作用说明
2010/10/25 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
2017/01/24 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
python处理圆角图片、圆形图片的例子
2014/04/25 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
调试Python程序代码的几种方法总结
2015/04/28 Python
Python利用IPython提高开发效率
2016/08/10 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python实现读取并保存文件的类
2017/05/11 Python
python3 爬取图片的实例代码
2018/11/06 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
python爬虫基础之urllib的使用
2020/12/31 Python
软件缺陷的分类都有哪些
2014/08/22 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
CNC数控操作工岗位职责
2013/11/19 职场文书
关于迟到的检讨书
2014/01/26 职场文书
父母寄语大全
2014/04/12 职场文书
公安学专业求职信
2014/07/27 职场文书
钓鱼岛事件感想
2015/08/11 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android