Jquery Baumrost (jqGrid) XML-Struktur für die Unterposten
Frage
Kann jemand bitte sagen Sie mir die XML-Struktur für Unterpunkte, die Anwendungen jqGrid. Ich habe die Dokumentation zu lesen und es erklärt nicht klar, wie man einen Baum Ansicht mit Unterpunkten in ihm schaffen würde. Im Grunde genommen habe ich ein 2 Säulengitter mit 3 Ebenen.
Lösung
Von der Demo: http://www.trirand.com/jqgrid35/jqgrid.html
(unter neu in Version 3.3-> Baumgitter)
Es macht diesen Ajax-Aufruf als Beitrag: http://www.trirand.com/jqgrid35/server.php?q= Baum
Der Post Parameter wie folgt aussehen:
_search: false
n_left: 1
n_level: 0
n_right: 8
nd: 1241000465087
nodeid: 1
page: 1
rows: 20
sidx
sord: asc
Welche liefert genau das:
<?xml version='1.0' encoding='utf-8'?>
<rows>
<page>1</page>
<total>1</total>
<records>1</records>
<row><cell>1</cell><cell>Cash</cell><cell>100</cell><cell>400.00</cell<cell>250.00</cell><cell>150.00</cell><cell>0</cell><cell>1</cell><cell>8</cell><cell>false</cell><cell>false</cell></row>
<row><cell>5</cell><cell>Bank's</cell><cell>200</cell><cell>1500.00</cell><cell>1000.00</cell><cell>500.00</cell><cell>0</cell><cell>9</cell><cell>14</cell><cell>false</cell><cell>false</cell></row>
<row><cell>8</cell><cell>Fixed asset</cell><cell>300</cell><cell>0.00</cell<cell>1000.00</cell><cell>-1000.00</cell><cell>0</cell><cell>15</cell><cell>16</cell><cell>true</cell><cell>false</cell></row>
</rows>
Für jede Unterreihe macht es einen anderen Ajax-Aufruf. Das erste „Zelle“ Element specifie die Zeilennummer. Wenn es eine Lücke vor der nächsten Zeile id ist, weiß er, dass es Subitems hat, und wird einen Expander für diese Zeile setzen. Wenn der Benutzer den Expander auswählt, eine andere Ajax-Aufruf macht, und die folgende zurückgegeben:
<?xml version='1.0' encoding='utf-8'?>
<rows>
<page>1</page>
<total>1</total>
<records>1</records>
<row><cell>2</cell><cell>Cash 1</cell><cell>1</cell><cell>300.00</cell><cell>200.00</cell><cell>100.00</cell><cell>1</cell><cell>2</cell><cell>5</cell><cell>false</cell><cell>false</cell></row>
<row><cell>4</cell><cell>Cash 2</cell><cell>2</cell><cell>100.00</cell><cell>50.00</cell><cell>50.00</cell><cell>1</cell><cell>6</cell><cell>7</cell><cell>true</cell><cell>false</cell></row>
</rows>
an der Quelle der Suche, gibt es Spaltennamen, und es wird erwartet sie, um zurückgeführt werden. Ich bin mir ziemlich sicher, dass Sie diese schreiben können nicht eine bestimmte Reihenfolge erwarten, aber das ist, wie die Abbildung gesetzt. Das ist so ziemlich ein Klon des Art und Weise ext Dinge tut, die einen guten Weg zu folgen, weil sie es gut tun .
jQuery("#treegrid").jqGrid({
url: 'server.php?q=tree',
treedatatype: "xml",
mtype: "POST",
colNames:["id","Account","Acc Num", "Debit", "Credit","Balance"],
colModel:[
{name:'id',index:'id', width:1,hidden:true,key:true},
{name:'name',index:'name', width:180},
{name:'num',index:'acc_num', width:80, align:"center"},
{name:'debit',index:'debit', width:80, align:"right"},
{name:'credit',index:'credit', width:80,align:"right"},
{name:'balance',index:'balance', width:80,align:"right"}
],
height:'auto',
pager : jQuery("#ptreegrid"),
imgpath: gridimgpath,
treeGrid: true,
ExpandColumn : 'name',
caption: "Treegrid example"
});
Und der Vollständigkeit halber, lässt die PHP-Source-Beispiel enthalten (ging durch diese viel Mühe, könnte es auch beenden!):
$node = (integer)$_REQUEST["nodeid"];
// detect if here we post the data from allready loaded tree
// we can make here other checks
if( $node >0) {
$n_lft = (integer)$_REQUEST["n_left"];
$n_rgt = (integer)$_REQUEST["n_right"];
$n_lvl = (integer)$_REQUEST["n_level"];
$n_lvl = $n_lvl+1;
$SQL = "SELECT account_id, name, acc_num, debit, credit, balance, level, lft, rgt FROM accounts WHERE lft > ".$n_lft." AND rgt < ".$n_rgt." AND level = ".$n_lvl." ORDER BY lft";
} else {
// initial grid
$SQL = "SELECT account_id, name, acc_num, debit, credit, balance, level, lft, rgt FROM accounts WHERE level=0 ORDER BY lft";
}
$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());
if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
header("Content-type: application/xhtml+xml;charset=utf-8"); } else {
header("Content-type: text/xml;charset=utf-8");
}
$et = ">";
echo "<?xml version='1.0' encoding='utf-8'?$et\n";
echo "<rows>";
echo "<page>1</page>";
echo "<total>1</total>";
echo "<records>1</records>";
// be sure to put text data in CDATA
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
echo "<row>";
echo "<cell>". $row[account_id]."</cell>";
echo "<cell>". $row[name]."</cell>";
echo "<cell>". $row[acc_num]."</cell>";
echo "<cell>". $row[debit]."</cell>";
echo "<cell>". $row[credit]."</cell>";
echo "<cell>". $row[balance]."</cell>";
echo "<cell>". $row[level]."</cell>";
echo "<cell>". $row[lft]."</cell>";
echo "<cell>". $row[rgt]."</cell>";
if($row[rgt] == $row[lft]+1) $leaf = 'true';else $leaf='false';
echo "<cell>".$leaf."</cell>";
echo "<cell>false</cell>";
echo "</row>";
}
echo "</rows>";