0

我有这个将多行数据提交到新数据库的解决方案。但我想附加到此操作脚本的末尾以删除选定的行。数据提交后如何在最后正确添加此功能?我添加了一个脚本,但它什么也没做。

按钮的旧代码:

            jQuery("#minibutton").click( function(){

    var selectedrows = $("#list").jqGrid('getGridParam','selarrrow');
if(selectedrows.length) {
for(var i=0;i<selectedrows.length; i++) {

var selecteddatais = $("#list").jqGrid('getRowData',selectedrows[i]);
        var rows=JSON.stringify(selecteddatais)
        var postArray = {json:rows};

    $.ajax({
      type: "POST",
      url: "jsonsend.php",
   data: postArray,       
   dataType: "json",
   success: function () { jQuery("#list").jqGrid('delGridRow', id, options );

    } }); } } });
     });

编辑:我目前尝试的解决方案

  $(function(){ 
  $("#list").jqGrid({
    url:'request.php',
    editurl: 'jqGridCrud.php',
    datatype: 'xml',
    mtype: 'GET',
    multiselect:true,
    multiboxonly:true,
    height: 450,
    width: 850,

    colNames:['id','Project', 'Assigned To','Assign Date','Check Date','Due Date','Attachments'],
    colModel :[ 
      {name:'id', index:'id', width:25}, 
      {name:'name', index:'name', width:250, align:'left',editable:true, editoptions:{
            size:60} }, 
      {name:'id_continent', index:'id_continent', width:55, align:'right',editable:true,edittype:'select', 
      editoptions:{value: "Henry:Henry; Ramon:Ramon; Paul:Paul" },mtype:'POST'  }, 

      {name:'lastvisit', index:'lastvisit', width:70, align:'right',formatter: 'date',srcformat:'yyyy-mm-dd',newformat: 'm-d-Y',editable:true, edittype: 'text',mtype:'POST' ,editoptions:{size:10, dataInit:function(elem){$(elem).datepicker({dateFormat:'m/d/yy'});}}} ,


      {name:'cdate', index:'cdate', width:70, align:'right',formatter: 'date',srcformat:'yyyy-mm-dd',newformat: 'm-d-Y', edittype: 'text',editable:true ,mtype:'POST' ,editoptions:{size:10, dataInit:function(elem){$(elem).datepicker({dateFormat:'m/d/yy'});}}} ,

      {name:'ddate', index:'ddate', width:70, align:'right',formatter: 'date',srcformat:'yyyy-mm-dd',newformat: 'm-d-Y',date:'true',editable:true, edittype: 'text',editoptions:{size:10, dataInit:function(elem){$(elem).datepicker({dateFormat:'m/d/yy'});}}} ,


      {name:'email', index:'email', width:70,align:'center',sortable:false,mtype:'POST' } 
    ],
    pager: '#pager',

    rowNum:20,
    rowList:[20,40,80],
    sortname: 'id',
    sortorder: 'desc',
    viewrecords: true,
    gridview: true,
    caption: 'Pending Assignments',


    ondblClickRow: function(rowid) {

    $(this).jqGrid('editGridRow', rowid,
                        {width:450,Height:400,recreateForm:true,closeAfterEdit:true,
                         closeOnEscape:true,reloadAfterSubmit:false, modal:true,mtype:'post'});}


            });



       $("#list").jqGrid("navGrid", { add: false, search: false }, {}, {}, {
    url: "jsonsend.php",
    onclickSubmit: function (options, ids) {
        var $self = $(this), selectedrows = ids.split(","), selectedData = [], i,
            l = selectedrows.length;

        for (i = 0; i < l; i++) {
            // fill array selectedData with the data from selected rows
            selectedData.push($self.jqGrid("getRowData", selectedrows[i]));
        }

        // the returned data will be combined with the default data
        // posted by delGridRow
        return {
            gridData: JSON.stringify(selectedData)
        }
    }
});


     });

jsonsend.PHP:

<?


    $database = "newhistoricform";
    $dbpassword = "pretty";
    $dbhost = "localhost";
    $dbuser = "root";


// connect to the MySQL database server
$con = mysql_connect($dbhost, $dbuser, $dbpassword);
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
@mysql_select_db($database,$con) or die("Error connecting to db.");




//First decode the array
$arr = $_POST["json"];
$decarr = json_decode($arr, true);
$count = count($decarr);


for ($x=0; $x < $count; $x++){
$newrec = $decarr; 
$id = $newrec['id']; 
$name = $newrec['name']; 
$id_continent = $newrec['id_continent']; 
$email = $newrec['email']; 
$lastvisit = $newrec['lastvisit']; 
$cdate = $newrec['cdate']; 
$ddate = $newrec['ddate']; 

}

// Create insert array
$values[] = "('".$id."', '".$name."', '".$id_continent."', '".$lastvisit."','".$cdate."','".$ddate."','".$email."' )";  





// Insert the records   

$sql = "INSERT INTO finish (id, name, id_continent, lastvisit,cdate,ddate, email)
VALUES ".implode(',', $values);

$result = mysql_query($sql, $con) or die(mysql_error());  


?>
4

1 回答 1

3

对不起,我不能完全关注你。首先,您使用从服务器(来自url:'request.php')返回的数据填充网格。数据可能来自数据库。数据项的id也已填充。id如果您正确填充网格,则每行的包含属性(rowid)和id列的内容将是数据库中的 id。

要删除数据库中的数据,您只需要拥有需要删除的行的 ID。取而代之的是,您将所选行中的所有数据发送到服务器。你为何这样做?服务器已经有所有数据了吗?唯一的解释是您需要用于并发控制的信息。好的,让我们发送真正需要的信息。

在我看来,您现有代码中的主要问题是逻辑错误:您获得了所有选定行的第一个 ids。然后为每个 id进行单独的 Ajax 调用。在调用的success回调内部(在服务器端成功删除一行之后),您将获得所有选定的行从 grid 中删除所有选定的行。因为success将被异步调用,所以您可以在将数据发送到服务器之前从网格中删除一些行。

此外,您已经使用editGridRow方法来编辑行。现有的delGridRow方法将选定的 id 列表发送到服务器(默认 URL 为editurl: "sendyo.php"),并从服务器端成功确认后删除行。您可以使用delData参数(请参阅文档)将任何附加信息发送到 id 列表。以最简单的形式,代码(句柄的$("#minibutton").click句柄)可能像

$("#list").jqGrid("delGridRow", $("#list").jqGrid("getGridParam", "selarrrow"));

或者,如果您需要发送所有选定行的完整内容,那么类似

var $grid = $("#list"),
    selectedrows = $grid.jqGrid("getGridParam", "selarrrow"),
    i,
    selectedData = [];

if (selectedrows.length) {
    for (i = 0; i < selectedrows.length; i++) {
        // fill array selectedData with the data from selected rows
        selectedData.push($grid.jqGrid("getRowData", selectedrows[i]));
    }
    $grid.jqGrid("delGridRow", $grid.jqGrid("getGridParam", "selarrrow"), {
        delData: {
            gridData: JSON.stringify(selectedData)
        }
    });
}

上面的代码将向服务器发送参数:oper带有 value "del"id带有逗号分隔的选定(已删除)rowid 列表以及gridData以 JSON 格式序列化的已删除行的内容数组。

#minibutton当前使用按钮。如果您要navGrid改用,那么您可以简化代码。您可以使用需要delGridRow您的删除按钮。您可以使用onclickSubmit回调来扩展发布的数据。如果您不需要导航栏中的“添加”和“搜索”按钮,您可以使用以下代码:

$("#list").jqGrid("navGrid", "#pager", { add: false, search: false }, {}, {}, {
    url: "jsonsend.php",
    onclickSubmit: function (options, ids) {
        var $self = $(this), selectedrows = ids.split(","), selectedData = [], i,
            l = selectedrows.length;

        for (i = 0; i < l; i++) {
            // fill array selectedData with the data from selected rows
            selectedData.push($self.jqGrid("getRowData", selectedrows[i]));
        }

        // the returned data will be combined with the default data
        // posted by delGridRow
        return {
            gridData: JSON.stringify(selectedData)
        }
    }
});
于 2013-05-16T10:29:52.950 回答