广

JavaScript

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    jqGrid表格应用

    2018-04-05 08:31:47 次阅读 稿源:互联网
    零七广告

    jqGrid可以结合fancybox等插件完成超酷的弹出层效果,通过与php后台交互,可以轻松完成数据的添加与详情查看,而这个过程完全是一个ajax异步通信过程,是一个非常友好的富客户端应用。

     

    在上一篇文章中,我们提到过jqGrid自身有强大的单元格操作模块,但是这些模块操作起来不太适合用户的习惯,在本文中,我们使用fancybox,以及表单插件来完成jqGrid数据的添加以及删除操作。

    首先需要在head中引入相关js和css文件。

    1. <link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.2.custom.css" /> 
    2. <link rel="stylesheet" type="text/css" href="css/ui.jqgrid.css" /> 
    3. <link rel="stylesheet" type="text/css" href="css/fancybox.css" /> 
    4. <script src="js/jquery.js" type="text/javascript"></script> 
    5. <script src="js/i18n/grid.locale-cn.js" type="text/javascript"></script> 
    6. <script src="js/jquery.jqGrid.min.js" type="text/javascript"></script> 
    7. <script src="js/jquery.fancybox.js" type="text/javascript"></script> 
    8. <script src="js/jquery.form.js" type="text/javascript"></script> 
    9. <script src="js/jquery.message.js" type="text/javascript"></script> 

    其中,fancybox是用来显示弹出层效果的插件,form和message是用来处理表单和提示信息的插件,然后在body里加入以下代码:

    1. <div id="opt"> 
    2.     <div id="query"> 
    3.        <label>编号:</label><input type="text" class="input" id="sn" /> 
    4.        <label>名称:</label><input type="text" class="input" id="title" /> 
    5.        <input type="submit" class="btn" id="find_btn" value="查 询" /> 
    6.     </div> 
    7.     <input type="button" class="btn" id="add_btn" value="新 增" /> 
    8.     <input type="button" class="btn" id="del_btn" value="删 除" /> 
    9. </div> 
    10. <table id="list"></table> 
    11. <div id="pager"></div> 

    我们在页面中放置一个“新增”和“删除”按钮,以及表格容器#list(jqGrid生成表格)以及分页条#pager。关于查询功能,我们在上一篇文章有讲解。

    新增数据

    1、读取数据:调用jqGrid,生成表格,此段代码在本站上一篇文章中有详细讲解,本文不再重复,您可以查看:

    2、调用表单:当点击“新增”按钮时,调用fancybox插件,弹出一个新增产品的表单层。

    1. $(function(){ 
    2.     $("#add_btn").click(function(){ 
    3.         $.fancybox({ 
    4.             'type':'ajax'
    5.             'href':'addGrid.html' 
    6.         }); 
    7.     }); 

    可以看出,调用fancybox时,以ajax的方式加载了一个页面:addGrid.html,这个页面用来放置要提交的表单。关于fancybox插件的应用,您可以查看本站文章了解:

    3、提交表单:我们需要在addGrid.html页面放置一表单。

    1. <form id="add_form" action="do.php?action=add" method="post"> 
    2. ... 
    3. </form> 

    当点击“提交”按钮时,对表单进行验证,这里我们使用了jquery.form.js完成表单的验证和提交,我们在addGrid.html页面加入以下代码:

    1. $(function(){ 
    2.     $('#add_form').ajaxForm({ 
    3.         beforeSubmit: validate, //验证表单 
    4.         success: function(msg){ 
    5.             if(msg==1){ //如果成功提交 
    6.                 $.fancybox.close();   //关闭fancybox弹出层 
    7.                 $().message("成功添加"); //提示信息 
    8.                 $("#list").trigger("reloadGrid"); //重新载入jqGrid数据 
    9.             }else
    10.                 alert(msg); 
    11.             } 
    12.         } 
    13.     });  
    14. }); 
    15. function validate(formData, jqForm, options) {   
    16.     for (var i=0; i < formData.length; i++) {  
    17.         if (!formData[i].value) {  
    18.             $().message("请输入完整相关信息"); 
    19.             return false;  
    20.         }  
    21.     }  
    22.     $().message("正在提交..."); 

    4、PHP处理数据:表单数据提交给后台do.php后,程序需要过滤表单提交的数据,然后将数据插入到数据表中,并将执行结果返回给前端页面。

    1. include_once ("connect.php"); //连接数据库 
    2. $action = $_GET['action']; 
    3. switch ($action) { 
    4.     case 'list' : //列表 
    5.         ... //读取数据列表,代码省略,请参照上一篇文章中的代码 
    6.         break
    7.     case 'add' : //新增 
    8.         //过滤输入的字符串 
    9.         $pro_title = htmlspecialchars(stripslashes(trim($_POST['pro_title']))); 
    10.         $pro_sn = htmlspecialchars(stripslashes(trim($_POST['pro_sn']))); 
    11.         $size = htmlspecialchars(stripslashes(trim($_POST['size']))); 
    12.         $os = htmlspecialchars(stripslashes(trim($_POST['os']))); 
    13.         $charge = htmlspecialchars(stripslashes(trim($_POST['charge']))); 
    14.         $price = htmlspecialchars(stripslashes(trim($_POST['price']))); 
    15.         if (mb_strlen($pro_title) < 1) 
    16.             die("产品名称不能为空"); 
    17.         $addtime = date('Y-m-d H:i:s'); 
    18.         //插入数据 
    19.         $query = mysql_query("insert into products(sn,title,size,os,charge,price,addtime)values 
    20.         ('$pro_sn','$pro_title','$size','$os','$charge','$price','$addtime')"); 
    21.         if (mysql_affected_rows($link) != 1) { 
    22.             die("操作失败"); 
    23.         } else { 
    24.             echo '1'
    25.         } 
    26.  
    27.         break
    28.     case '' : 
    29.         echo 'Bad request.'
    30.         break

    删除数据

    数据的删除也是通过前端和后台的异步交互来完成的,本例中的删除功能可以执行批量删除,js获取jqGrid选中的要删除的行,然后将选中的数据对应的id提交给php处理,请看代码:

    1. $(function(){ 
    2.     $("#del_btn").click(function(){ 
    3.         var sels = $("#list").jqGrid('getGridParam','selarrrow'); 
    4.         if(sels==""){ 
    5.            $().message("请选择要删除的项!"); 
    6.         }else
    7.            if(confirm("您是否确认删除?")){ 
    8.             $.ajax({ 
    9.               type: "POST"
    10.               url: "do.php?action=del"
    11.               data: "ids="+sels, 
    12.               beforeSend: function() { 
    13.                    $().message("正在请求..."); 
    14.               }, 
    15.               error:function(){ 
    16.                    $().message("请求失败..."); 
    17.               }, 
    18.               success: function(msg){ 
    19.                    if(msg!=0){ 
    20.                        var arr = msg.split(','); 
    21.                        $.each(arr,function(i,n){ 
    22.                              if(arr[i]!=""){ 
    23.                                  $("#list").jqGrid('delRowData',n);  
    24.                              } 
    25.                        }); 
    26.                        $().message("已成功删除!"); 
    27.                    }else
    28.                        $().message("操作失败!"); 
    29.                    } 
    30.               } 
    31.             }); 
    32.            } 
    33.         } 
    34.     }); 
    35. }); 

    看代码,首先通过jqGrid的getGridParam方法获取选中的数据行selarrrow,如果选中多项,则获取到的sels值是一个以逗号隔开的字符串,然后提示是否确认删除,确认后提交ajax请求,如果后台php删除数据成功,则返回删除的数据id,前端调用jqGrid的delRowData方法将对应的数据行删除,并提示“以成功删除”。

    后台do.php获取ajax提交过来的要删除的id,执行删除语句,完成删除操作。

    1. switch ($action) { 
    2.     case 'del' : //删除 
    3.         $ids = $_POST['ids']; 
    4.         delAllSelect($ids, $link); 
    5.         break
    6.     case '' : 
    7.         echo 'Bad request.'
    8.         break
    9. //批量删除操作 
    10. function delAllSelect($ids, $link) { 
    11.     if (empty ($ids)) 
    12.         die("0"); 
    13.     mysql_query("delete from products where id in($ids)"); 
    14.     if (mysql_affected_rows($link)) { 
    15.         echo $ids; 
    16.     } else { 
    17.         die("0"); 
    18.     } 

    至此,我们已经完成了对jqGrid的读取、新增、删除和查询数据的基本操作的讲解,希望对您有所帮助。对于jqGrid表格的应用文章的讲解有不对的地方,欢迎大家批评指正。

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告