jqGrid gewusst Wie: Löschen von Mehreren Ausgewählten Zeilen nach dem Absenden in eine Datenbank?
Habe ich diese Lösung, die sendet mehrere Zeilen Daten in eine neue Datenbank. Aber ich möchte anfügen an das Ende dieser Aktion-Skript zum löschen der ausgewählten Zeilen. Wie Sie richtig hinzufügen mit dieser Funktion am Ende, nachdem Daten übertragen wurden? Ich habe ein script, aber es tut sich nix.
Alt-code für den button:
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 );
} }); } } });
});
Edit: Meine aktuellen versuche zur Lösung
$(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());
?>
- Niemand kann helfen? Zumindest zeigen Sie mich in die richtige Richtung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sorry, aber ich kann nicht Folgen Sie. Sie zuerst ein raster mit den Daten, die vom server zurückgegeben (von
url:'request.php'
). Die Daten sind wohl aus der Datenbank. Dieid
des dataitems sind gefüllt auch. Wenn Sie richtig füllen das grid dann das enthalten vonid
Attribut jeder Zeile (die Zeilennummer) und der Inhaltid
Spalte werden die ids aus der Datenbank.Löschen von Daten in die Datenbank, die Sie brauchen, müssen nur die ids der Zeilen, die müssen gelöscht werden. Anstatt, dass Sie senden alle Daten von ausgewählten Zeilen an den server. Warum tust du das? Die server haben schon alle Daten? Die einzige Erklärung wäre, dass Sie brauchen die Informationen für die parallelitätssteuerung. OK, lassen Sie uns, dass die Informationen wirklich benötigt werden, gesendet.
Das Hauptproblem in Ihrem vorhandenen code scheint mir der Fehler in der Logik: Sie erhalten erste ids aller ausgewählten Zeilen. Dann machen Sie separater Ajax-call für jede id. Innerhalb von
success
Rückruf der Ausschreibung (nach eine Zeile wurde erfolgreich auf dem server gelöscht Seite) erhalten Sie alle ausgewählten Zeilen und entfernen Sie alle ausgewählten Zeilen aus dem grid. Dasuccess
wird asynchron aufgerufen werden, Sie können entfernen Sie einige Zeilen aus dem raster vor Sie senden die Daten an den server.Außerdem verwenden Sie bereits editGridRow Methode für die Bearbeitung der Zeilen. Es existieren delGridRow Methode, die schicken die Liste mit den ausgewählten ids an den server (Standard-URL ist
editurl: "sendyo.php"
) und löschen Sie die Zeilen nach der erfolgreichen Bestätigung von der server-Seite. Sie könnendelData
parameter (siehe die Dokumentation) senden Sie alle zusätzlichen Informationen, um die Liste der ids. In der einfachsten form wird der code (der Griff des$("#minibutton").click
Griff) könnte sein, wieoder, wenn Sie benötigen, senden Sie vollständigen Inhalt aller markierten Zeilen, dann so etwas wie
Den obigen code senden Baum parameter an den server:
oper
mit dem Wert"del"
,id
mit Komma getrennte Liste der ausgewählten (gelöscht) rowids undgridData
mit dem array der Inhalt der gelöschten Zeilen serialisiert im JSON-format.Verwenden Sie
#minibutton
- button derzeit. Wenn Sie verwenden würdenavGrid
statt, dann können Sie den code vereinfachen. Sie können die Löschen-Taste, die AnrufedelGridRow
für Sie. Sie könnenonclickSubmit
Rückruf zu erweitern, die geposteten Daten. Wenn Sie nicht brauchen, zum Beispiel Add und Search-Tasten in der navigator-Leiste können Sie den code über, wie die folgendendelGridRow
mitdelData
oderonclickSubmit
? Wenn keine weiteren Daten an den server gesendet werden, dass Sie etwas falsch gemacht haben. Die code, die Sie während Ihrer letzten versuche?"#pager"
wie der erste parameter dernavGrid
(siehe meine änderungen). Sie können ajaxDelOptions - option (die Sie benötigen, legen Sie es auf der gleichen Ebene, woonclickSubmit
callback), um jQuery.ajax-Optionen wiedataType
odercontentType
. Zum BeispielajaxDelOptions: { contentType: "application/json", dataType: "json" }
. Es ist schwer zu beantworten, die Sie jetzt, weil Sie entfernt Ihre alten manuellen Aufruf von jQuery.ajax. Sie können nun sehen, dassgridData
senden?editurl
pro Standard. Wenn Sie benötigen, so schicken Sie es zu einem anderen URL, die Sie verwenden könnenurl
option wie im obigen Beispiel:url: "jsonsend.php"
. Ich verstehe nicht, warum Sie konnte machen müssen zwei separate Anrufe mit verschiedenen URLs:"jqGridCrud.php"
und"jsonsend.php"
bei einer delete-operation? Bei Bedarf können Sie Anruf intern jede Methode auf der server-Seite, um die information weiterzuleiten. Ich denke, dass nur ein - URL aufgerufen werden soll.Demo
Tabelle können Sie die gleichen wählen, die Sie verwenden, während der Befüllung des Gitters, aber mit " WHERE id in (id1, id2, ...). Sie könnenSELECT INTO
konstruieren, um die Daten speichern zufinish
Tabelle ausDemo
Tabelle, bevor Sie Sie löschen. Sie können so den Betrieb und die delete-operation in einer Transaktion.