jqGrid表格应用之新增与删除数据附源码下载

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

下面给大家展示了效果图,喜欢的朋友可以直接下载源码哦。

效果展示    源码下载

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

XHTML

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

<link rel="stylesheet" type="text/css" href="css/ui-lightness/jquery-ui-1.8.2.custom.css" />
<link rel="stylesheet" type="text/css" href="css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" href="css/fancybox.css" />
<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-cn.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
<script src="js/jquery.fancybox.js" type="text/javascript"></script>
<script src="js/jquery.form.js" type="text/javascript"></script>
<script src="js/jquery.message.js" type="text/javascript"></script> 

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

<div id="opt">
 <div id="query">
 <label>编号:</label><input type="text" class="input" id="sn" />
 <label>名称:</label><input type="text" class="input" id="title" />
 <input type="submit" class="btn" id="find_btn" value="查 询" />
 </div>
 <input type="button" class="btn" id="add_btn" value="新 增" />
 <input type="button" class="btn" id="del_btn" value="删 除" />
</div>
<table id="list"></table>
<div id="pager"></div> 

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

新增数据

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

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

$(function(){
 $("#add_btn").click(function(){
 $.fancybox({
 'type':'ajax',
 'href':'addGrid.html'
 });
 }); 

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

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

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

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

$(function(){
 $('#add_form').ajaxForm({
 beforeSubmit: validate, //验证表单
 success: function(msg){
 if(msg==1){ //如果成功提交
 $.fancybox.close(); //关闭fancybox弹出层
 $().message("成功添加"); //提示信息
 $("#list").trigger("reloadGrid"); //重新载入jqGrid数据
 }else{
 alert(msg);
 }
 }
 });
});
function validate(formData, jqForm, options) {
 for (var i=0; i < formData.length; i++) {
 if (!formData[i].value) {
 $().message("请输入完整相关信息");
 return false;
 }
 }
 $().message("正在提交...");
} 

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

include_once ("connect.php"); //连接数据库
$action = $_GET['action'];
switch ($action) {
 case 'list' : //列表
 ... //读取数据列表,代码省略,请参照上一篇文章中的代码
 break;
 case 'add' : //新增
 //过滤输入的字符串
 $pro_title = htmlspecialchars(stripslashes(trim($_POST['pro_title'])));
 $pro_sn = htmlspecialchars(stripslashes(trim($_POST['pro_sn'])));
 $size = htmlspecialchars(stripslashes(trim($_POST['size'])));
 $os = htmlspecialchars(stripslashes(trim($_POST['os'])));
 $charge = htmlspecialchars(stripslashes(trim($_POST['charge'])));
 $price = htmlspecialchars(stripslashes(trim($_POST['price'])));
 if (mb_strlen($pro_title) < 1)
 die("产品名称不能为空");
 $addtime = date('Y-m-d H:i:s');
 //插入数据
 $query = mysql_query("insert into products(sn,title,size,os,charge,price,addtime)values
 ('$pro_sn','$pro_title','$size','$os','$charge','$price','$addtime')");
 if (mysql_affected_rows($link) != 1) {
 die("操作失败");
 } else {
 echo '1';
 } 

 break;
 case '' :
 echo 'Bad request.';
 break;
} 

删除数据

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

$(function(){
 $("#del_btn").click(function(){
 var sels = $("#list").jqGrid('getGridParam','selarrrow');
 if(sels==""){
 $().message("请选择要删除的项!");
 }else{
 if(confirm("您是否确认删除?")){
 $.ajax({
 type: "POST",
 url: "do.php?action=del",
 data: "ids="+sels,
 beforeSend: function() {
  $().message("正在请求...");
 },
 error:function(){
  $().message("请求失败...");
 },
 success: function(msg){
  if(msg!=0){
  var arr = msg.split(',');
  $.each(arr,function(i,n){
  if(arr[i]!=""){
   $("#list").jqGrid('delRowData',n);
  }
  });
  $().message("已成功删除!");
  }else{
  $().message("操作失败!");
  }
 }
 });
 }
 }
 });
}); 

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

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

switch ($action) {
 case 'del' : //删除
 $ids = $_POST['ids'];
 delAllSelect($ids, $link);
 break;
 case '' :
 echo 'Bad request.';
 break;
}
//批量删除操作
function delAllSelect($ids, $link) {
 if (empty ($ids))
 die("0");
 mysql_query("delete from products where id in($ids)");
 if (mysql_affected_rows($link)) {
 echo $ids;
 } else {
 die("0");
 }
} 

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

(0)

相关推荐

  • jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法

    一般的,一个jqGrid的基本属性有一下几个常用的. 复制代码 代码如下: $("#id").jqGrid({ url: "", datatype: "local", postData: { strJson: Data }, mtype: "post", height: 45, width: 450, rowNum: rum, //每页的记录数 pgtext: "第{0}页 共{1}页", pgbutton

  • jQuery中jqGrid分页实现代码

    (1)页面代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UT

  • jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)

    jqGrid 是一个用来显示网格数据的jQuery插件,通过使用jqGrid可以轻松实现前端页面与后台数据的ajax异步通信. 一.要引用的文件 要使用jqGrid,首先页面上要引入如下css与js文件. 1.css <link href="/css/ui.jqgrid.css" rel="stylesheet" type="text/css" /> 2.js <script src='/Scripts/js/jquery-2.

  • jqGrid jQuery 表格插件测试代码

    官方Demo地址:http://www.trirand.com/blog/jqgrid/jqgrid.html 效果图: 页面代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://w

  • MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据

    看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是MongoDB基本应用实现起来还是比较轻松的,甚至代码比基本的ADO.net访问关系数据源还要简洁.由于其本身的"非关系"的数据存储方式,使得对象关系映射这个环节对于MongoDB来讲显得毫无意义,因此我们也不会对MongoDB引入所谓的"ORM"框架. 下面我们将逐步

  • Jqgrid表格随窗口大小改变而改变的简单实例

    使用jquery插件,主要实现当窗口发生改变时jqgird表格也随着改变大小 html:<div id="liste">  <table id="list" class="scroll" cellpadding='0' cellspacing='0' ></table>     <div id="pager" class="scroll" style="t

  • 通过点击jqgrid表格弹出需要的表格数据

    首先对Jqgrid网格插件做个简要的说明.在众多的表格插件中,Jqgrid的特点是非常鲜明的. 特点如下: 完整的表格呈现与运算功能,包含换页.栏位排序.grouping.新增.修改及删除资料等功能. 自定义的工具列 预设的Navigator工具列,可以很容易的使用新增.删除.编辑.检视及搜寻等功能. 完整的分页功能 按下任一栏位的标头,皆可以该栏位为排序项目.无论是升序或降序皆可. 预设的action formatter,可以快速而直觉地对每笔资料做运算. 支持多种数据格式.比如json.xm

  • jqgrid 表格数据导出实例

    首先,是一段javascript脚本: 复制代码 代码如下: /**  *   *   * @param table_id 表格的id  * @param container_id 容器的id  * @param form_id 提交表单的id  * @param title 文件名  * @param rownumbers  */  function getXlsFromTbl(table_id, container_id ,form_id, title, rownumbers) {     

  • Jqgrid之强大的表格插件应用

    jqGrid是一款基于jQuery的功能强大的表格插件,使用jqGrid可以轻松实现前端页面与后台数据进行ajax异步通信,jqGrid运行速度相当快,可以很好的应用在一些后台管理系统来管理大量数据的场合. jqGrid特性: 基于jquery UI主题,开发者可以根据客户要求更换不同的主题. 兼容目前所有流行的web浏览器. Ajax分页,可以控制每页显示的记录数. 支持XML,JSON,数组形式的数据源. 提供丰富的选项配置及方法事件接口. 支持表格排序,支持拖动列.隐藏列. 支持滚动加载数

  • jQuery插件jqGrid动态获取列和列字段的方法

    本文实例讲述了jQuery插件jqGrid动态获取列和列字段的方法.分享给大家供大家参考,具体如下: 1.问题背景 jqGrid表格插件,利用自身方法获取表格的表头和表格字段:获取列名和列字段名显示在弹窗里,用复选框进行勾选 2.实现源码 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>jqGrid动态获取列和列字段</title> <

随机推荐