【问题标题】:Two Parameter for Deleting A Row in JqGridJqG​​rid中删除一行的两个参数
【发布时间】:2013-07-02 04:35:18
【问题描述】:

我在删除 jqGrid 中的一行时遇到了一些问题。

我的行包含两个主键,即 email 和 idms_module。删除行需要这两个键,因为一封电子邮件可以有两个或多个 idms_module。

语法如下:

   jQuery("#grid-uac").jqGrid({
                mtype:'GET',
                url:'functions/get_useraccess.php',
                editurl:'functions/edit_useraccess.php',
                datatype: "JSON",
                colNames:['User Email','Module Access','Level Access'],
                colModel:[
                    {name:'user_email', width:300, editable:true, key:true},
                    {name:'module_access', width:550,editable:true, key:true,edittype:'select',editoptions:{dataUrl:'functions/get_modusracc.php'}},
                    {name:'level_access',width:100,editable:true,edittype:'select',editoptions:{value:"0:read only;1:read write"}}
                ],
                loadComplete: function () {
                alert("OK");
                },    
                loadError: function (jqXHR, textStatus, errorThrown) {
                    alert('HTTP status code: ' + jqXHR.status + '\n' +
                          'textStatus: ' + textStatus + '\n' +
                          'errorThrown: ' + errorThrown);
                    alert('HTTP message body (jqXHR.responseText): ' + '\n' + jqXHR.responseText);
                },
                rowNum:10,
                rowList:[5,10,15],
                pager: '#pager-uac',
                sortname: 'user_email',
                viewrecords: true,
                jsonReader: **{id: "user_email", id2 or some var : "module_access"}**, 
                sortorder: "asc",
                gridview: true,
                autoencode:true,
                caption:"Inventory User Access Role"
            });

例如我想删除一行,其中包含电子邮件:admin@test.com 和 idms_module: 6

部分php代码为:

  $email  = $_REQUEST['id'];
  $modules= $_REQUEST['another var'];

  $query = DELETE FROM table WHERE email= $email AND module = $modules

我已成功收到来自 id 的电子邮件,但对如何获取“另一个 var”没有任何想法

【问题讨论】:

  • @Oleg 可以这样做吗?如果没有,我将使用另一种方式删除该功能

标签: php jquery mysql json jqgrid


【解决方案1】:

首先是关于数据库设计的一个常见评论。通常在数据库中使用整数值。在定义此类列时使用IDENTITYAUTO_INCREMENT 词。通常将整数列用作PRIMARY KEY。在不能包含重复项的列上另外添加UNIQUE CONSTRAINTUNIQUE CONSTRAINT 在列上添加索引,因此按列搜索会很快。我认为我在生产数据库中使用的数据库中的所有表都遵循规则。

您无法更改服务器端的任何内容,然后您可以执行以下操作。您不能将属性key:true 用作colModel 的一列。如果您可以将更多作为同一数据的一行,则不能在 user_email 之类的一列中使用它。例如,您可以做的是:使用由user_emailmodule_access 值和一些分隔符组成的组合id 值。例如在"test@mydomain.com""module1" 的情况下,您可以使用test@mydomain.com@module1 作为id。第二个@ 不能在电子邮件中,您可以将其用作分隔符。编码的另一种变体将是Base64 编码(或仅十六进制编码)值user_email、字符_ 和Base64 编码(或十六进制编码)值module_access。 jqGrid 将在删除操作期间将 rowid 发送给您,您将能够将 rowid 解码为user_emailmodule_access

您还有一个选择是使用 any rowid,但同时发送 'user_email''module_access' 以及 rowid。您可以使用serializeDelDataonclickSubmit 回调(请参阅the documentation)或delData 来扩展数据。回调将 rowid 作为输入。您可以使用getCellgetRowData 重试'user_email''module_access' 并扩展将发送到服务器的数据。 The answer 显示相同的编辑操作。回调的简单重命名将向您显示 .您可以在the answerthis one 中找到其他示例。

【讨论】:

  • 嗨@oleg,感谢您的回答,我决定改变删除功能的方式。因为,我无权更改数据库。
【解决方案2】:

您的服务器能否提供包含 email+id 的附加数据属性?然后,您可以将其声明为 jqgrid 中的 id 列(隐藏),并在您将其发送回时让服务器取消标记?

【讨论】:

  • 嗨@Pablo,附加数据属性是什么意思?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 1970-01-01
相关资源
最近更新 更多