`
yanyanquan
  • 浏览: 451154 次
  • 性别: Icon_minigender_1
  • 来自: 江门
社区版块
存档分类
最新评论

jquery表格插件之flexigrid教程实用版

 
阅读更多
用插件来做规律性很强的数据展现是个不错的选择,jquery插件家族中这类插件通常叫做table或者grid,本人用过两个有名的插 件:jqgrid和flexgrid,自己也曾经在使用jquery之前尝试过自己写grid插件,这篇文章将就flexgrid插件的使用和改造展开。
非常囧的是flexgrid的homepage居然无法访问了,不过没关系,Google group上已经有了相关的讨论,且非常活跃,访问地址为:http://groups.google.com/group/flexigrid?hl=en

1.flexigrid特性介绍
来看看jquery官网有关该插件的介绍官网列举的Features:
* 列可伸缩
* 高度可调整
* 可按照表头排序
* 很酷的外观风格
* 能够转换一个普通的表格
* 可以连接到一个ajax方式的数据源(仅是xml格式)
* 分页功能
* 显示/隐藏 列
* 提供可供外部访问的API
* 更多更多…
Google group 上的介绍:轻量级但功能丰富的data grid插件,支持列伸缩和排序功能,可采用ajax的方式连接到一个xml的数据源来获取所需数据,和Ext Grid非常相似,但它是纯jquery的,这使得它更加小巧,并遵循jquery插件一贯的少量配置特性

2.怎样获取flexigrid?
既然官网已经无法访问,那就去其他途经吧,在上面提到的jquery站点和Google group站点都可以找到下载链接,如果仍然无法搞定,那么pm我吧:)
3.我想观看一下Demo先
嗯,不错的习惯,毕竟同类插件已经挺多的了,也不乏jqgrid这样的强悍者,还是货比三家先吧。Google group上提供的各个后台语言版本的Demo:
php 版本的 by Kevin Kietel: http://sanderkorvemaker.nl/test/flexigrid/
CodeIgniter 版本的 by Armorfist: http://flexigrid.eyeviewdesign.com/
ASP 版本的 by Synergiq: http://jamesowers.co.uk/asp-tutorials/57/flexigrid-with-asp/
Ruby on Rails 版本的 by Nick Fessel: http://www.nickfessel.com/index.php?post=17

4.使用步骤:
a.下载jquery.js(最新1.2.6版本)和flexigrid.js(jquery官网上提供的较旧,而官网又无法访问,我自己用的是$Date: 2008-07-14 00:09:43 +0800 (Tue, 14 Jul 200  $版本的),并在需要使用的页面顺序引入,(还需要引入相关的样式文件和图片文件)。
b.安装过程。首先在需要使用的DOM标签中加入代码:

<table id="yourgrid_id"></table>
在onload事件或者jquery的$(function(){…})方法中加入下列初始化代码:

$("#top_ten").flexigrid({
url: "getData.php",
dataType: 'xml',
colModel : [{display: '编号', name : 'id', width : 65, sortable : true, align: 'center'},
{display: '内容提要', name : 'summary', width : 180, sortable : true, align: 'left'},
{display: '内容类别', name : 'contentType', width : 60, sortable : true, align: 'left'},
{display: '字段名', name : 'arriveRate', width : 90, sortable : true, align: 'left'},
{display: '字段名', name : 'hitRate', width : 90, sortable : true, align: 'left'},
{display: '字段名', name : 'fitRate', width : 90, sortable : true, align: 'left'}],
sortname: "pushCount",sortorder: "desc",usepager: false,title: '表头名称',
useRp: false,rp: 10,showTableToggleBtn: true,width: 650,height: 270
});
5.上面这样做之后,前端就部署完毕了,但参数极其取值需要说明一下,完整的参数及说明如下(当前值为默认值):
height: 200, //flexigrid插件的高度,单位为px
width: ‘auto’, //宽度值,auto表示根据每列的宽度自动计算
striped: true, //是否显示斑纹效果,默认是奇偶交互的形式
novstripe: false,
minwidth: 30, //列的最小宽度
minheight: 80, //列的最小高度
resizable: true, //是否可伸缩
url: false, //ajax方式对应的url地址
method: ‘POST’, // 数据发送方式
dataType: ‘xml’, // 数据加载的类型
errormsg: ‘Connection Error’,//错误提升信息
usepager: false, //是否分页
nowrap: true, //是否不换行
page: 1, //默认当前页
total: 1, //总页面数
useRp: true, //是否可以动态设置每页显示的结果数
rp: 15, // 每页默认的结果数
rpOptions: [10,15,20,25,40],//可选择设定的每页结果数
title: false,//是否包含标题
pagestat: ‘Displaying {from} to {to} of {total} items’,//显示当前页和总页面的样式
procmsg: ‘Processing, please wait …’,//正在处理的提示信息
query: ”,//搜索查询的条件
qtype: ”,//搜索查询的类别
nomsg: ‘No items’,//无结果的提示信息
minColToggle: 1, //minimum allowed column to be hidden
showToggleBtn: true, //show or hide column toggle popup
hideOnSubmit: true,//隐藏提交
autoload: true,//自动加载
blockOpacity: 0.5,//透明度设置
onToggleCol: false,//当在行之间转换时
onChangeSort: false,//当改变排序时
onSuccess: false,//成功后执行
onSubmit: false // 调用自定义的计算函数

6.处理数据的后台脚本
flexigrid需要数据支持,其数据是通过ajax方式传送到客户端来进行处理的,格式为xml,在作者给定的demo中包含了一个php格式的处理脚本post.php,其中包含了数据库的操作,在此需要进行相应的修改。
另外,需要注意,提供的数据个数和格式需要和4中指定的列数对应上。当然,这里的数据是会被解析成html内容,也就是说,你可以向客户端传送光秃秃的数据,也可以稍微“包装”一下,比如:数据或者:
甚至是图片什么的,总之可以自定义,加点JavaScript事件也无妨,反正jquery特别适合做这样的处理。这就为后续处理埋下了伏笔,这些内容将在后面讲到,要不然对不起标题中的“玩转”二字。

到这里,基本的用法算是完成了,一些个性化的设置和处理可以在读懂代码和配置项之后施行,也可以看看源码,结构挺不错的,注意几个扩展事件如reload,还有,计算的入口方法populate,可以进行相应的修改,简化很多繁琐的时间,不过要谨慎。

之前写到:玩转jquery插件之flexigrid(一)如何获取并使用flexigrid?挺受欢迎,后来倒是一直有在从事flexigrid的应用,但的确有些忙,一些整理和保密(一些应用中涉及机密的内容要去掉)工作也感觉会挺繁琐,只好慢慢来吧。
谈到改造,先说一下我们一般都会有哪些比较典型的应用吧,比如在数据上的点击增加点事件,比如加一个筛选记录的操作入口,比如编辑某条记录等等,这些至少是我工作中实实在在的需求。那么在这里,限于篇幅和个人精力,我们做三个方面的改造。
a).增加按钮事件
b).显示某个时间区间内的数据,且可以选择时间区间
c).根据输入的条件筛选数据

对于需求a,我们对按钮事件的期望当然是去完成某项操作,在这里讨论的是和服务端有交互的事件,在flexigrid的一些高级例子中,给出了“增 加”和“删除”按钮,但未给出交互示例,其实作者意图也是告诉我们该增加怎样的按钮,按钮放在哪里,按钮该干什么事情等等,都是可以让我们自定义的。如对 于“增加”和“删除”按钮事件,我们可以这里来处理:
首先在flexigrid的定义中增加这样的设置,

buttons : [
                {name: '添加版本', bclass: 'add', onpress : versionMan},
                {name: '删除版本', bclass: 'delete', onpress : versionMan},
                {separator: true}
],
表示要给flexigrid增加两个按钮,名为“增加”和“删除”,分别用“add”和“delete”的class来修饰,且都调用了一个名为versionMan的函数,并且按钮直接启用了分隔符。
至于versionMan函数,完全可以自定义要做的事情。如在示例中我这样进行了定义(主要是看看结构,可以根据自己的需求进行更改):

function versionMan(com,grid){
        if(com == "添加版本"){
            type = "insert";
            //mask(); 给弹出的div加入遮罩效果
            //_initVal();初始化弹出div的函数调用,这里均可自定义
            $("#edit_versionDiv").css("top",(document.documentElement.scrollTop+260)+"px").show();
        }
        else if(com == "删除版本"){
            if($('.trSelected',grid).length==0){
                alert("请先选中要删除的版本");return false;
            }
            if(confirm('删除 ' + $('.trSelected',grid).length + ' 版本?')){
                var versionArr=$(".trSelected td:eq(2) div:first-child",grid);
                var versionStr = new Array();
                for(var i=0; i<versionArr.length;i++){
                    versionStr.push($(versionArr[i]).text());
                }
                $.ajax({
                    type: "POST",
                    url:  "del_version.php",
                    data: "ids="+versionStr.join(","),
                    success: function(msg){
                        if(msg=="success"){
                            $("#version_man").flexReload({});
                        }
                        else alert("有错误发生");
                    },
                    error: function(msg){
                        alert(msg);
                    }
                });
            }
        }
    };
上面的示例中需要注意的是:使用ajax方法调用一个php脚本并传入参数,从而执行了需要的操作,php脚本的写法并没有什么不同,就像普通的处理即 可,然后$(”#version_man”).flexReload({});这里表示重新调用了flexigrid控件。
除了上面这种通过定义的接口增加按钮和事件的方式,我们还可以采用完全自定义的方式来达到同样的效果,如可以这样来进行:

function set_exeBtn(id){
    if($("#"+id).parent().siblings(".pDiv").children(".pDiv2").children("div:last").contents("input").length == 0){
        var str = '<div class="btnseparator"></div><div class="pGroup" style="float:right"><input type="button" onclick="updateS
tate(/''+id+'/')" class="button" value="执行" /></div>';
        $("#"+id).parent().siblings(".pDiv").children(".pDiv2").append(str);
    }
};
然后在flexigrid初始化参数中设置:onSuccess:function(){set_exeBtn(”gridtable”);},这表示 flexigrid加载完成后执行set_exeBtn函数,该函数向flexigrid的右下角加入了一个名为“执行”的按钮,并且为该按钮定义了事件 updateState,该事件的定义如下:

function updateState(id){
//最后
        $("#"+id+" tr td:last-child div:first-child").each(function(){
            var op = $(this).text();
            if(op == "无操作")return;
            else{
                var ids = $(this).parents("tr:first").children("td:first").children("div:first").text();//假定第一行的值为记录的id
                var newStateVal = $("span:first",this).attr('lang');
                $.ajax({
                    url:"update_msgState.php ",
                    type:"POST",
                    dataType:"text/html",
                    data:"ids="+ids+"&ps="+newStateVal,
                    success:function(data){
                        if(data == "success"){
                            //reloadGrids(id); 自定义执行成功后的函数调用,可以重新调用flexigrid或者做其他操作
                        }
                        else{
                            alert("执行过程遇到错误");
                        }
                    },
                    error:function(msg){
                        alert(msg);
                    }
                });
            }
        });
    };
该事件的简要说明:该事件检查flexigrid的最后一列的值,如果不等于无操作,将以ajax的方式执行update_msgState.php程 序,该程序主要用于更新flexigrid中的记录项的状态字段值,和一般程序也没什么两样,执行成功会输出success,在这里必须提及我对 flexigrid.js文件的两处改动:

//大概1421行
    $.fn.flexReload = function(p) { // function to reload grid
        return this.each( function() {
                if (this.grid&&this.p.url){
                    //roby added 2 lines  针对url参数和onSuccess被自定义后却并没有起作用,自行设置的,其他项如果也是如此,可以采用此种方法
                    if(p.url!=undefined) this.p.url=p.url;
                    if(p.onSuccess!=undefined) this.p.onSuccess=p.onSuccess;
                    if(p.sortname!=undefined){this.p.sortname=p.sortname;this.p.sortorder=p.sortorder;} this.grid.populate();}
            });           
    }; //end flexReload

//大概389行
    if (p.total==0)
    {
                    $('tr, a, td, div',t).unbind();
                    $(t).empty();
                    p.pages = 1;
                    p.page = 1;
                    this.buildpager();
                    $('.pPageStat',this.pDiv).html(p.nomsg);
                    //roby added 1 line 这里主要是为了使onSuccess在即便flexigrid初始化调用获得的数据为空时仍然会执行(默认不执行,至于应不应该这么做,还是看具体需求吧,我在后面的例子中会用到)
                    if (p.onSuccess) p.onSuccess();
                    return false;
    }
写到这里,发现篇幅已经很长,而且在方式上我想最好是给出一些在线的demo,这个工作我往后有时间了再整理吧,其他的将在后续文章中完成,感谢各位的支
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/anshao/archive/2009/08/12/4435167.aspx
分享到:
评论

相关推荐

    jquery表格插件Flexigrid

    综上所述,Flexigrid是一个强大且灵活的jQuery表格插件,它提供了丰富的功能和高度的可定制性,适合用于构建数据密集型的Web应用。掌握上述知识点,将有助于你有效地使用和优化Flexigrid,创建出符合用户需求的高效...

    jQuery表格插件 Flexigrid的例子

    Flexigrid是一个类似于Ext Gird,但基于jQuery开发的Grid。它具有的功能包括:可以调整列宽,合并列标题,分页,排序,显示/隐藏表格等。Flexigrid显示的数据能够通过Ajax获取或者从一个普通的表格转换。这个例子对...

    jquery 表格插件 Flexigrid

    Flexigrid是一款基于jQuery的开源表格插件,它为网页开发者提供了一种高效、灵活的方式来展示数据,并且具有丰富的功能和自定义选项。这个插件的设计目标是使数据的显示和操作变得更加简单,同时保持良好的性能和...

    jquery插件之flexigrid篇

    Flexigrid是一款基于jQuery的轻量级数据网格插件,专为实现强大的表格展示和操作功能而设计。在Web开发中,特别是在构建数据密集型应用时,它提供了一种高效且用户友好的方式来显示、排序、筛选和操作数据。这款插件...

    jquery表格插件flexigrid-1.1.zip

    Flexigrid是一个类似于Ext Gird,但基于jQuery开发的Grid。它具有的功能包括:可以调整列宽,合并列标题,分页,排序,显示/隐藏表格等。Flexigrid显示的数据能够通过Ajax获取或者从一个普通的表格转换。

    jquery插件之flexigrid学习实例-jar包

    总的来说,"jquery插件之flexigrid学习实例-jar包"是一个实践教程,旨在帮助开发者理解如何将Flexigrid这个强大的jQuery插件与Struts2和JSON技术结合,以构建高效、交互性强的Web应用表格功能。这个实例涉及到了前端...

    强大的jQuery表格插件

    **jQuery表格插件详解** ...无论是在大型企业级应用还是个人项目中,选择合适的jQuery表格插件都能显著提升表格的交互性和实用性。通过不断学习和实践,开发者可以充分利用这些工具,创造出色的用户体验。

    jquery插件之flexigrid学习实例

    Flexigrid是一款基于jQuery的表格插件,它提供了丰富的功能,如数据分页、排序、搜索和自定义列显示,适用于构建数据密集型Web应用。在这个"jquery插件之flexigrid学习实例"中,我们将深入探讨如何在Struts2框架下...

    Jquery仿Ext表格flexigrid

    综上所述,Flexigrid是一款功能全面、易于定制的jQuery表格插件,对于构建数据密集型的Web应用,它提供了强大的工具和解决方案。无论是新手还是经验丰富的开发者,都能从中受益。通过深入理解和灵活运用,可以打造出...

    JQuery_插件FlexiGrid_之完全配置与使用

    ### JQuery插件FlexiGrid之完全配置与使用 #### 一、引言 FlexiGrid是一款基于jQuery的轻量级表格插件,它为开发者提供了简单易用的方式来展示和操作数据表格。FlexiGrid支持多种功能,如排序、分页、筛选等,非常...

    37款开源jQuery表格插件

    jQuery表格插件 Flexigrid for jQuery **简介** Flexigrid是一款类似ExtGrid的jQuery Grid插件,拥有调整列宽、合并列标题、分页、排序等功能。它可以从服务器获取数据,也可以从现有的普通表格转换而来。 **...

    jquery flexigrid插件

    Flexigrid-Web2.0 jQuery表格插件 Flexigrid 是一个轻量级的Web2.0 jQuery插件。它包含很多非常Cool的特性,如主题定制、分页、工具栏、搜索、排序、ajax读取数据源、调整列宽高尺寸等。 一个中文实例教程: ...

    jquery表格插件带分页动态数据表格代码

    常见的jQuery表格插件有DataTables、jqGrid、Flexigrid等。在本项目中,可能使用的是某一特定的表格插件,通过定制或配置实现所需功能。 二、分页 在大数据量的展示场景下,分页是一种常用的技术手段,可以避免一...

    jquery插件FlexiGrid的使用(已更新)

    FlexiGrid是一款基于jQuery的表格插件,它提供了丰富的功能,包括数据分页、排序、过滤、编辑等,使得在Web应用中展示和操作大量数据变得更加便捷。在本篇文章中,我们将深入探讨FlexiGrid的使用方法,以及如何将其...

    jquery flexigrid

    jQuery Flexigrid是一款基于jQuery库的表格插件,专为网页数据展示提供强大的功能。它具有高度可定制性,支持分页、排序、搜索以及自定义列宽,使得网页中的数据管理更加便捷和灵活。 Flexigrid的核心特性在于其...

    jquery flexigrid 支持前台排序

    jQuery Flexigrid是一款功能强大的表格插件,它提供了丰富的自定义选项和操作,使得前端表格的呈现更加灵活。本文将详细介绍如何利用jQuery Flexigrid配合jQuery Tablesorter来实现前端的客户端排序功能,无需依赖...

    jquery 2个表格插件

    本文将深入探讨两个基于jQuery的表格插件:DataTables 1.8.2和flexigrid 1.1,这两个插件极大地提升了网页中数据展示的效率和用户体验。 **DataTables 1.8.2** DataTables是一款功能强大的jQuery插件,专门用于...

    jquery grid插件 Flexigrid + servlet

    Flexigrid是一款基于jQuery的网格插件,它提供了一种灵活、强大的方式来展示和操作数据,常用于创建数据密集型的Web应用。这个插件以其丰富的功能、自定义选项和用户友好的界面而受到开发者的青睐。在与servlet结合...

    jQuery插件flexigrid使用总结--进一步优化

    jQuery插件flexigrid是一款轻量级、功能强大的表格插件,能够帮助开发者快速构建具有分页、排序、搜索等功能的动态表格。本文将对flexigrid的使用进行总结,并探讨其进一步优化的方法。 一、flexigrid基本用法 1. ...

Global site tag (gtag.js) - Google Analytics