2013-07-22 33 views
0

我想在我的JQGrid中删除多行的删除功能。我的代码如下所示:在JQGrid中传递额外参数用多选删除

{height:180,mtype:"POST",closeAfterDel:true, url:'gridedit.jsp',reloadAfterSubmit:true, 

onclickSubmit: function (options, rowid) { 
     var rowData = jQuery(this).jqGrid('getRowData', rowid); 
     var params ={amount:rowData.amount,account:rowData.account.replace(/-/g,"")}; 

     return params; 

    }, 

    afterSubmit: function() { 
    $(this).jqGrid('setGridParam', {datatype:'json'}); 
    return [true,'']; 
} 

}

我要让缺失按列rowData.account

的价值观的问题是,当我选择多行,我可以看到网格将所有rowid传递回编辑URL,但只传递第一行的rowData.account值!

有没有办法使网格传回所有值?我不能根据后端的行ID删除,因为我的数据库没有任何行ID。

请帮忙。

这里是我的网代码:

jQuery(document).ready(function(){ 

    jQuery("#list").jqGrid({ 

    datatype: 'json', 
    url:'gridfeeder.jsp?ctlSelectedDate=<%= request.getParameter("ctlSelectedDate")%>', 

    colNames: ['Date', 'Account ', 'Amount', 'Code'], 
    colModel: [ 

      //First Column, DATE 

    {name: 'adate', index: 'adate', width: 300, sorttype: 'date', align: 'center',datefmt: 'Y-m-d', 
editable:true, formatter: myLinkFormatter, editoptions:{ 

    dataInit:function(elem) 
     { 
    jQuery(elem).datepicker({ 

     showButtonPanel: true, 
     changeMonth: true, 
      changeYear: true 

    }); 
}}, search:true, stype:'text',searchoptions:{ 

    dataInit:function(elem) 
     { 
    jQuery(elem).datepicker({ 

     showButtonPanel: true, 
     changeMonth: true, 
      changeYear: true 

    }); 
} 

} 

    }, 
      //Second Column, ACCOUNT 

      { name: 'account', index: 'account', width: 300, align: 'center', sorttype: 'string', editable:true, 
    search:true, stype:'text',editrules:{custom:true, custom_func: 

     //Validation for this column for editing 

     function(value, colname) { 
     if (value.length<9 || value.length>11) 
       return [false,"Invalid Input"]; 
      else 
       return [true,""]; 
      } 
    }, 
    searchrules:{custom:true, custom_func: 

//验证此列用于搜索

 function(val, colname) { 
     if (val.length<9 || val.length>11) 
       return [false,"Invalid Input"]; 
      else 
       return [true,""]; 
      } 
    } 
    }, 

      //Third Column, AMOUNT 

    { name: 'amount', index: 'amount', width: 300, align: 'center', sorttype: 'float', editable:true, 
    editrules:{number:true}, search:true, stype:'text' 
    }, 

      //Fourth Column, CODE 

    { name: 'code', index: 'code', width: 300, align: 'center', sorttype: 'float', editable:true, 
    search:true, stype:'text' 
    } 

    ], 

    pager: "#pager",  //Identifying the navigation bar 
    rowNum: 500,   // how many rows to display on page 1 
    rowList: [500,1000, 2000, 3000,4000], //values for the dropdown which specifies how many rows to show 
    sortorder: "desc", //the order of sorting by default 
    viewrecords: true, // displays total number of rows 
    gridview: true, 
    autoencode: true, 
    height:400, //height of the grid 
    ignoreCase:true,// case insensitive search 
    multiselect:true, // checkboxes before each row 
    multiboxonly: true, 
    loadonce:true, //for client side sorting, searching and pagination 
    caption:"This is me" // caption for the grid header 

这里是navgrid部分:

}).navGrid('#pager',{edit:true,add:true,del:true,search:true,refresh:true}, 

// Options for EDIT 

    {height:280,mtype: "POST",closeAfterEdit: true,reloadAfterSubmit:true, url:'gridedit.jsp', 

     recreateForm: true, 

     //set some properties beofre the dialog box is seen by the user 

     beforeShowForm: function(form) { 

      /*$('#adate',form).attr('readonly','readonly'); 
      $('#account',form).attr('readonly','readonly');*/ 

      $('#adate',form).hide(); 
      $('#account',form).hide(); 
     }, 

     // what happens when the user clicks submit. passing extra parameters 

      onclickSubmit: function (options, postdata) { 

       var rowid = postdata[this.id + "_id"]; // postdata.list_id 

       var dataF = jQuery('#list').jqGrid ('getCell', rowid, 'account'); 

      return {account:dataF.replace(/-/g,"")}; 
      }, 

      // changing the datatype 

     afterSubmit: function() { 
      $(this).jqGrid("setGridParam", {datatype: 'json'}); 
      return [true,'']; 
     } 

    }, 

    //ADD options 

    {height:280,mtype:"POST", closeAfterAdd:true, reloadAfterSubmit:true, url:'gridedit.jsp', 


beforeShowForm: function(form) { 

    /*var cm = jQuery("#list").jqGrid('getColProp','adate'); 
    alert(cm); 
    cm.editable = false; 
    $('#adate',form).attr('readonly','readonly'); 
    $('#account',form).attr('readonly','readonly');*/ 
    $('#adate',form).show(); 
    $('#account',form).show(); 
}, 

    //Change the datatype 

afterSubmit: function() { 
    $(this).jqGrid("setGridParam", {datatype: 'json'}); 
    return [true, ""]; 
} 
    }, 

    {height:180,mtype:"POST",closeAfterDel:true, url:'gridedit.jsp',reloadAfterSubmit:true, 

/* onclickSubmit: function (options, rowid) { 
     var rowData = jQuery(this).jqGrid('getRowData', rowid); 
     var params ={account:rowData.account.replace(/-/g,"")}; 

     return params; 

    },*/ 

    delData: { 
     account: function() { 
        var sel_id = $("#list").jqGrid('getGridParam', 'selrow'); 
        var value = $("#list").jqGrid('getCell', sel_id, 'account'); 
        return value.replace(/-/g,""); 
      } 
     }, 
    afterSubmit: function() { 
    $(this).jqGrid('setGridParam', {datatype:'json'}); 
    return [true,'']; 
} 

    } 

    ); 

    function myLinkFormatter(cellvalue, options, rowObject) { 

     return "<a href='account094act.jsp?GETDATE=" + cellvalue + "&GETACC=" + rowObject[1] + "'>" + cellvalue + "</a>"; 
    } 

    jQuery("#refresh_list").click(function(){ 
     jQuery("#list").setGridParam({datatype: 'json'}); 
     jQuery("#list").trigger("reloadGrid"); 
    }); 

    }); 

回答

1

其中大都采用独特价值这对你的情况来说最适合rowid。可能您应该考虑使用account列中的值作为rowid?你没有发布你的完整的jqGrid代码,你并没有发布用于填充网格的JSON/XML数据。所以很难给你一个确切的建议。

您可以考虑将key: true属性放在colModelaccount的定义中。如果列中的所有值都是唯一的(网格的所有行中的值都不相同),则可以使用这些设置。如果rowid(网格的属性的id属性的值)将被指定为与account列中的值相同的值。

所有编辑操作发送编辑行的ID。所以你会得到account发送到服务器。在multiselect: true的情况下jqGrid发送逗号分隔的rowid列表。在你的情况下,你会得到服务器逗号分隔的已删除帐户列表。也许你可以根据account值得到所有其他信息(如amount),如果需要的话。如果account的值确实是唯一的,并且您有服务器上的所有数据,那么您可以获得任意信息,其对应于选择的account

+0

您好,感谢您的回复。我正在使用JSON数据。现在当我选择多行后点击删除按钮时,没有任何反应!根本没有数据被发送到服务器。我很确定它应该至少发送所有行的ID。我做了一次,很久以前,但我现在不记得了。 – AbtPst

+0

我已经发布了我的网格上面的代码 – AbtPst

+0

你能看到我失踪的任何东西吗?有什么我需要指定,以便删除按钮适用于多个选择? – AbtPst