0

I have several SlickGrids that allow User to deleteItems (actually rows). This works fine but when User wants to cancel the deletion of the rows, I am not able to redisplay the entire grid. Here's the relevent code to remove the rows:

//  Modal Grid2 Remove rows
$('#removeBtnGrid2').click(function() {
    for (var i = 1; i <= 2; i++) {
        dataViewMG2.deleteItem(i);
    }
    invmodalgrid2.invalidate();
    invmodalgrid2.render();
});

and here's the code I'm using to redisplay the Grid (this doesn't work):

// XXXXXXXXXXXXXXXXXXXXXXX Load selected data into MODAL GRID 2 
$('#addBtnGrid1').click(function() {  /// this acts as a cancel btn
    dataViewMG2.beginUpdate();
    dataViewMG2.setItems(modaldata2);
    dataViewMG2.refresh();
    invmodalgrid2.render();
    dataViewMG2.endUpdate();
}

What am I doing wrong? Thanks

4

1 回答 1

1

首先,addBtnGrid1当我认为您的意思是 (2) 时,您已经提出addBtnGrid2,其次,您是否正在处理服务器端来删除您的行?因为这似乎不是处理它的正确方法(尽管我不得不承认我没有尝试过你的代码)。我处理删除的方式是直接将 ID 本身的操作嵌入到columns接受/取消定义的定义中,例如:

columns1 = [
            {id:'accnt_name', field:'accnt_name', name: "Account Name", width:90, sortable:true, sorter:sorterStringCompare} },
            {id:"id", name:"", field:"id", width:20, formatter: function (r,c,id,def,datactx){ return "<a href='#' onclick='if (confirm(\"Really Delete?\")) removeClick("+id+","+r+")'><img src='/images/deletex_16.png' border='0' /></a>";} }
        ];

然后要删除的函数(在 PHP 中使用 AJAX 调用服务器端)如下所示:

function removeClick(databaseId, gridRow) {
        $.post('myajaxfile.php?action=delete', {id:databaseId}, function(ServerResponse) {
            // if database return an error then display it to the user and undo the cell change
            if(ServerResponse  === undefined) {
                alert("Deleting from database failed...");
            }else {
                if( parseInt(ServerResponse.affected_rows) < 1 || ServerResponse.error_msg != "" ) {                             
                    alert("Deleting from database failed...\n\nERROR Returned: "+ServerResponse.error_msg);
                }else {
                    // success, update the datagrid view on screen
                    var item = dataView1.getItem(gridRow);//RowNum is the number of the row
                    dataView1.deleteItem( item.id );//RowID is the actual ID of the row and not the row number
                    grid1.invalidate();
                    grid1.render();          
                }    
            }   
            $('#loading').hide(); // hide the loading logo                                                                        
        }, "json")
        .fail(function(ServerResponse) { 
            alert("Deleting from database failed...\n\nERROR Returned: "+ServerResponse.responseText);  
            $('#loading').hide(); // hide the loading logo             
        });      
    }

因此,如果 DELETE 在服务器端运行良好,我只会刷新(渲染)网格......希望它有所帮助!我认为没有必要向您展示用于删除的 PHP 文件(服务器端),但如果您这样做了,请再次询问...

于 2013-03-04T23:48:24.827 回答