dhtmlxGrid是功能強大的客戶端網格組件,常用於AJAX應用的數據表格展示。需求:Grid數據異步載入完成後,自動將選中焦點定位到最後一行。利用loadXML的回調參數afterCall配合selectCell、getRowsNum輕鬆實現。
grid.loadXML(url, afterCall):異步載入XML數據,載入完成後自動調用afterCall函數。grid.getRowsNum():返回當前Grid總行數。grid.selectCell(rowIndex, colIndex, preserveSelection):選中指定單元格,preserveSelection=true保持滾動位置。grid.rowsCol[index]:獲取指定索引的行對象(內部數組)。<div id="gridbox" style="width:600px; height:400px;"></div>
<script>
// 定義載入完成後的回調函數
function scrollToLastRow() {
var rowCount = mygrid.getRowsNum();
if (rowCount > 0) {
// 索引從0開始,最後一行索引為 rowCount-1
// 選中第0列,preserveSelection=true 保持視圖不跳動
mygrid.selectCell(mygrid.rowsCol[rowCount - 1], 0, true);
}
}
// 初始化Grid
mygrid = new dhtmlXGridObject('gridbox');
mygrid.setImagePath("../imgs/");
mygrid.setHeader("Author,Title");
mygrid.setInitWidths("150,150");
mygrid.setColAlign("left,left");
mygrid.setColTypes("ro,link"); // 唯讀、超鏈接
mygrid.setColSorting("str,str");
mygrid.setColumnColor("white,#d5f1ff");
mygrid.init();
// 載入數據,註冊回調
mygrid.loadXML("grid_links.xml", scrollToLastRow);
</script>
getRowsNum()返回行數,最後一行索引為rowCount - 1,需判空防呆。true表示保持選中狀態不觸發onRowSelect事件,避免副作用;false會觸發選中事件。rowsCol已就緒,可安全操作。mygrid.objBox.scrollTop = mygrid.rowsCol[rowCount-1].offsetTop或調用mygrid.showRow(rowCount-1)(若版本支持)。| 需求 | 實現思路 |
|---|---|
| 定位到特定業務鍵值行 | 載入後遍歷rowsCol匹配grid.cells(rowId, colIndex).getValue(),命中則selectCell |
| 新增行後定位到新行 | grid.addRow()返回新行ID,直接selectCell(newRow, 0, true) |
| 編輯模式下保持焦點 | grid.editCell()進入編輯,回調中grid.editCell(row, col)恢復 |