我已經通過了我可以找到的每個示例,而且似乎都沒有適應我需要的特定場景。我找到了適合ctrl或shift-selection的例子,但只適用於JQGrid,不適用於TreeGrid。一旦我拿出這些例子,並嘗試將它們調整爲實現XML數據類型和URL的TreeGrid,而不是JSON或「本地」,它們就會中斷。TreeGrid XML shiftKey ctrlKey select
這最近一次嘗試包括結合此網址所採取的multiselecthandler:http://www.trirand.com/blog/?page_id=393/feature-request/more-control-over-clickselect-behavior/&value=beforeSelectRow&type=1&include=1&search=1
我需要創建的TreeGrid使用XML實現的選擇方法:單點擊選擇,按Ctrl鍵追加到選擇,並按住shift鍵選擇最後一個選定行和當前行之間的每一行。我從Oleg找到了一個基於JSON的JqGrid場景,但是一旦我改變它來使用TreeGrid和XML,它就不起作用。請幫忙。
這裏是由URL生成我的XML的一個子集:
<?xml version="1.0"?>
<rows>
<page>1</page>
<total>1</total>
<records>1</records>
<row><cell>1</cell><cell>Bank Data</cell><cell></cell><cell>1</cell><cell/><cell>false</cell><cell>true</cell><cell>true</cell></row>
<row><cell>3</cell><cell>FINANCIAL PROFILE</cell><cell></cell><cell>2</cell><cell>1</cell><cell>false</cell><cell>false</cell><cell>true</cell></row>
<row><cell>4</cell><cell>Balance Sheet:</cell><cell></cell><cell>3</cell><cell>3</cell><cell>false</cell><cell>false</cell><cell>true</cell></row>
<row><cell>5</cell><cell>Total assets</cell><cell>EXFHBS01</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row>
<row><cell>11</cell><cell>Percent change in total assets</cell><cell>EXFHPC01</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row>
<row><cell>18</cell><cell>Held-to-maturity securities (Amortized cost)</cell><cell>EXFHBS03</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row>
<row><cell>25</cell><cell>Available-for-sale securities (Fair value)</cell><cell>EXFHBS04</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row>
<row><cell>31</cell><cell>Total securities</cell><cell>EXFHBS02</cell><cell>4</cell><cell>4</cell><cell>true</cell><cell>false</cell><cell>true</cell></row>
</rows>
這裏是我的TreeGrid代碼:
$(document).ready(function(){
$("#grid").jqGrid({
treeGrid: true,
treeGridModel: 'adjacency',
ExpandColumn: 'item',
url: 'parseCreateTreeGridXml.php',
datatype: 'xml',
mtype: 'GET',
colNames: ["ID", "Item", "Identifier"],
colModel: [
{name: 'id', index: 'id', width: 2, hidden:false, key: true},
{name: 'item', index: 'item', width: 40, hidden: false, sortable: true},
{name: 'rcon', index: 'rcon', hidden:false, width: 5}
],
treeIcons: {plus:'ui-icon-circle-plus',minus:'ui-icon-circle-minus',leaf:'ui-icon-stop'},
rowNum: 10000,
width: 980,
height: '100%',
multiselect: true
beforeSelectRow: function(){ return false; }
});
});
var grid = $("#grid");
grid.bind("click", grid, multiSelectHandler);
//grid.jqGrid('hideCol','cb');
function multiSelectHandler(e) {
var mygrid = e.data;
var ts = mygrid[0], td = e.target;
var scb = $(td).hasClass("cbox");
var ptr = $(td).parents("tr.jqgrow");
if (!ptr.length || (td.tagName == 'INPUT' && !scb) || td.tagName == 'A') {
return true;
}
var sel = mygrid.getGridParam('selarrrow');
var sid = ptr[0].id;
var selected = $.inArray(sid, sel) >= 0;
if (e.ctrlKey || (scb && (selected || !e.shiftKey))) {
mygrid.setSelection(false,true,ptr);
} else {
if (e.shiftKey) {
var six = mygrid.getInd(sid);
var min = six, max = six;
$.each(sel, function() {
var ix = mygrid.getInd(this);
if (ix < min) min = ix;
if (ix > max) max = ix;
});
while (min <= max) {
var row = ts.rows[min++];
var rid = row.id;
if (rid != sid && $.inArray(rid, sel)<0) {
mygrid.setSelection(false, false, $(row));
}
}
} else if (!selected) {
mygrid.resetSelection();
}
if (!selected) {
mygrid.setSelection(false, true, ptr);
} else {
var osr = mygrid.getGridParam('onSelectRow');
if ($.isFunction(osr)) {
osr(sid, true);
}
}
}
}