2009-04-29 3 views
0

Может кто-нибудь скажет мне структуру XML для подпозиций, которые использует jqgrid. Я прочитал документацию, и она не объясняет, как можно создать древовидное представление с подпунктами в нем. В основном у меня есть 2-х столбчатая сетка с 3 уровнями.Структура дерева jQuery (jqgrid) xml для подпозиций

ответ

2

С демо: http://www.trirand.com/jqgrid35/jqgrid.html

(под новой версии 3.3-> дерево сетки)

Это делает этот АЯКС вызов как пост: http://www.trirand.com/jqgrid35/server.php?q=tree

Почте параметров выглядит так:

_search: false 
n_left: 1 
n_level: 0 
n_right: 8 
nd: 1241000465087 
nodeid: 1 
page: 1 
rows: 20 
sidx  
sord: asc 

Что возвращает именно это:

<?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> 

Для каждой подстроки он вызывает другой вызов ajax. Первый элемент «cell» указывает номер строки. Когда есть пробел перед идентификатором следующей строки, он знает, что у него есть подпункты, и поместит расширитель для этой строки. Когда пользователь выбирает расширитель, он делает еще один вызов Ajax, а следующее возвращается:

<?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> 

Глядя на источник, он определяет имена столбцов, и он ожидает, чтобы они были возвращены в порядке. Я уверен, что вы можете написать это, чтобы не ожидать определенного порядка, но так настроено отображение. Это в значительной степени клон пути ext делает вещи, которые являются хорошим способом следовать, потому что они делают это хорошо.

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" 
}); 

И, для полноты картины, позволяет включать в качестве примера исходного PHP (прошли через это много хлопот, могли бы также закончить его!):

$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>";  

 Смежные вопросы

  • Нет связанных вопросов^_^