jqGrid表格应用——新增与删除数据

jerry JQuery 2015年08月20日 收藏

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

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

XHTML

首先需要在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,生成表格,此段代码在本站上一篇文章中有详细讲解,本文不再重复,您可以查看: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插件的应用,您可以查看本站文章了解: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("正在提交...");
  23. }

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. break;
  27. case '' :
  28. echo 'Bad request.';
  29. break;
  30. }

删除数据

数据的删除也是通过前端和后台的异步交互来完成的,本例中的删除功能可以执行批量删除,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. //批量删除操作
  11. function delAllSelect($ids, $link) {
  12. if (empty ($ids))
  13. die("0");
  14. mysql_query("delete from products where id in($ids)");
  15. if (mysql_affected_rows($link)) {
  16. echo $ids;
  17. } else {
  18. die("0");
  19. }
  20. }

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

下载地址