zoukankan      html  css  js  c++  java
  • jqGrid添加删除功能(不和数据库交互)

    jqGrid添加删除功能(不和数据库交互)

    一、背景需求

      项目中需要在前端页面动态的添加行,删除行,上下移动行等,同时还不和数据库交互。一直在用jqGrid展示表格的我们,从没有深入的研究过它,当然看完我写的文章之后,你会发现虽然实现了,但还是不够深入具体清晰。总之,这只是我实现的一种方式,达到了我的目的,特在此记录下而已。

    想要的效果图(其实有出入,这是我做的最终的效果):

    二、HTML部分

     

     1 <html>
     2 <body>
     3     <table id="jqGrid"></table>
     4     <div id="pagerde"></div>
     5     <div style="text-align:right;">
     6         <input type="button" id="up" class="btn btn-primary dropdown-text" value="上移" onclick="btn_up()" />
     7         <input type="button" id="down" class="btn btn-primary dropdown-text" value="下移" onclick="btn_down()" />
     8         <input type="button" id="confirm" class="btn btn-primary dropdown-text" value="保存调整" onclick="btn_confirm()" />
     9     </div>
    10 </body>
    11 </html>

     

    说明:前面的<table><div>两个毋庸置疑必须要有的,最后的<div>是加了几个按钮,用来移动jqGrid的行的。本来想用jqGrid的行拖曳功能来做的,但是没搞出来,无奈只能用这种方法了。

    三、添加删除功能要点

    1.colModel: 

    1 colModel: [
    2             { label: '', name: '',  25, align: 'left' },
    3             { label: '主键', name: 'Id', hidden: true, },
    4             { label: '工位编码', name: 'StationCode',  80, editable: true, editoptions: { size: 10 } },//editable: true, editoptions: { size: 10 }
    5             { label: 'VIN码', name: 'VIN',  120, editable: true, editoptions: { size: 10 } },//editable: true, editoptions: { size: 10 }
    6             { label: '车型', name: 'Model',  80, editable: true, editoptions: { size: 10 } },//editable: true, editoptions: { size: 10 }
    7             ],

    想要的效果是点击添加弹出页面,输入内容,提交请求。如下图

     

     研究过程中发现,colModel中必须要有

    editable: true, editoptions: { size: 10 }

    这两个熟悉,否则虽然能弹出页面,但是没有左边的字段名称。

    查询API,对editable的解释是:单元格是否可编辑;对editoptions的解释是:编辑的一系列选项。

    好吧,我还是不理解。。。但就是不加就不出来,加上就出来。。。

     2.导航栏中添加想要的按钮

     1 $("#jqGrid").jqGrid('navGrid', '#pagerde', {
     2             edit: false,
     3             add: true,
     4             del: true,
     5             search: false,
     6             addtext: "添加",
     7             deltext: "删除",
     8         }, {   //EDIT
     9 
    10         }, {//add
    11             closeAfterAdd: true,
    12             reloadAfterSubmit: true,
    13             afterSubmit: function (response, postdata) {//主要用于显示服务器状态信息(例如,数据成功保存或者被服务器端取消保存的原因) 
    14                 $.currentWindow().$("#jqGrid").jqGrid('setGridParam', {
    15                 }).trigger("reloadGrid");
    16                 return [true, '']
    17             },
    18         }, {   //DELETE  
    19             closeAfterDelete: true,
    20             reloadAfterSubmit: true,
    21             afterSubmit: function (response, postdata) {
    22                 $.currentWindow().$("#jqGrid").jqGrid('setGridParam', {
    23                 }).trigger("reloadGrid");
    24                 return [true, '']
    25             },
    26         }, {//SEARCH
    27 
    28         });

    需要哪个按钮就把那个按钮设置为true,并设置按钮显示的名称,最后几个{}是分别对应上面按钮的方法:方法中我只用了三个属性,closeAfterAdd(closeAfterDelete),reloadAfterSubmit,afterSubmit,分别是添加删除后关闭页面,提交后重新加载,提交后的操作(好像有点冲突的意思,可以自己试试去掉一个)

    3.添加editurl

    1 editurl: "/PM/QueueAdjustment/EditQO_T2_ListRow",

    说明:前端就这三个要点

    四、后台控制层部分

    1.首先页面要先重数据库查询出数据,由于我要做的添加删除操作是不和数据库交互的,因此,我把起始查出来的数据放到了session中,以后的添加删除都是对session中的数据做操作。

     1      //查询QO_T2_List表
     2         public ActionResult getQO_T2_List()
     3         {
     4             //1.先从session中查询是否有数据
     5             List<Entities.QO_T2_List> list = (List<Entities.QO_T2_List>)Session["QO_T2_List"];
     6             //2.如果没有,去数据库查询,并放到session中
     7             if (list == null || list.Count == 0)
     8             {
     9                 Session["QO_T2_List"] = this.CreateService<IQueueAdjustmentAppServices>().GetDataList();
    10                 //重新重session中获取一下数据,返回到前端页面展示
    11                 List<Entities.QO_T2_List> list2 = (List<Entities.QO_T2_List>)Session["QO_T2_List"];
    12                 return Content(list2.ToJson());
    13             }
    14             //如果有,直接返回到前端页面展示
    15             else
    16             {
    17                 return Content(list.ToJson());
    18             }
    19         }
    20         //调整QO_T2_List表
    21         [HttpPost]//这个必须要有,因为是表单请求(或者在前端指明post请求)
    22         public ActionResult EditQO_T2_ListRow()
    23         {
    24             //1.从session中获取数据
    25             List<Entities.QO_T2_List> list2 = (List<Entities.QO_T2_List>)Session["QO_T2_List"];
    26             //2.获取请求信息
    27             NameValueCollection forms = Request.Form;
    28             //3.获取请求信息的oper[add,del,edit]
    29             string strOperation = forms.Get("oper");
    30             //4.如果为add添加操作执行以下方法
    31             if (strOperation == "add")
    32             {
    33                 //4.1获取请求信息中的字段值
    34                 string StationCode = forms.Get("StationCode");
    35                 string VIN = forms.Get("VIN");
    36                 string Model = forms.Get("Model");
    37                 //string ScanTime = forms.Get("ScanTime");
    38                 //4.2新建一个实体类,并给实体类各属性赋值
    39                 Entities.QO_T2_List entity = new Entities.QO_T2_List();
    40                 entity.StationCode = StationCode;
    41                 entity.VIN = VIN;
    42                 entity.Model = Model;
    43                 //entity.ScanTime = Convert.ToDateTime(ScanTime);
    44                 entity.Id = Guid.NewGuid().ToString("N");
    45                 entity.CreationTime = DateTime.Now;
    46                 entity.CreateUserId = Guid.NewGuid().ToString("N");
    47                 entity.IsDeleted = false;
    48                 entity.IsEnabled = true;
    49                 //4.3将此实体类添加到session中
    50                 list2.Add(entity);
    51             }
    52             //5.如果为del删除操作执行以下方法
    53             if (strOperation == "del")//{EmpId=false&oper=del&id=3}
    54             {
    55                 //5.1获取请求信息中要删除行的行号(id)
    56                 string id = forms.Get("id");
    57                 for (int i = 0; i < list2.Count; i++)
    58                 {
    59                     if ((i+1).ToString() == id)
    60                     {
    61                         //5.2先将要删除的数据放到QE_ErrorList表中
    62                         this.CreateService<IQueueAdjustmentAppServices>().SaveToErrorListTable("QO_T2_List", list2[i]);
    63                         //5.3再删除session中数据
    64                         list2.Remove(list2[i]);
    65                     }
    66                 }
    67             }
    68             //6.编辑完后返回session中的数据到前端展示
    69             return Content(list2.ToJson());
    70         }
    71         //保存QO_T2_List调整
    72         public ActionResult SaveQO_T2_ListRow()
    73         {
    74             //1.从session中获取数据
    75             List<Entities.QO_T2_List> list2 = (List<Entities.QO_T2_List>)Session["QO_T2_List"];
    76             //2.删除数据库中的数据
    77             this.CreateService<IQueueAdjustmentAppServices>().DeleteTableDate("QO_T2_List");
    78             //3.遍历session中的数据,重新添加到表QO_T2_List中
    79             foreach (Entities.QO_T2_List item in list2)
    80             {
    81                 this.CreateService<IQueueAdjustmentAppServices>().SaveQO_T2_ListRow(item);
    82             }
    83             return Success("保存成功");
    84         }

    五、后台实现层部分就是和数据库的交互了(略)。

  • 相关阅读:
    内容生成器.计数器及多列
    STT-MTJ(自旋转移矩磁隧道结)模型的Verilog-A语言描述(仅参考)
    将进酒-唐·李白
    三十六计、孙子兵法
    Keil新建工程步骤
    No.6 Verilog 其他论题
    2-4 Numpy+Matplotlib可视化(二)
    2-3 Numpy+Matplotlib可视化(一)
    0-0 列表,元组,字典,集合
    2-2 Numpy-矩阵
  • 原文地址:https://www.cnblogs.com/luna-hehe/p/7009102.html
Copyright © 2011-2022 走看看