这应该很简单但是......
以下代码工作正常(我已经删除了此处不需要的信息):
$(function()
{
.
..
...
// Defining the data options.
var datasetOptions =
{
fields: fieldArray,
recordType: 'array',
data: rowData
};
// Putting together the column options.
var columnOptions = new Array();
for (var i = 0; i < fieldNames.length; i++)
{
columnOptions.push({id: fieldNames[i], header: fieldNames[i], width: columnWidth});
}
// Defining the grid options.
var toolbar = 'filter state';
var gridOptions =
{
id: 'SigmaGridID',
container: 'SigmaGridDiv',
height: gridHeight,
pageSize: rowCount,
replaceContainer: true,
resizable: true,
selectRowByCheck: false,
showGridMenu : false,
showIndexColumn: false,
skin: "vista",
toolbarContent: toolbar,
toolbarPosition: 'bottom',
width: gridWidth,
dataset: datasetOptions,
columns: columnOptions
};
// Displaying the grid.
var grid = new Sigma.Grid(gridOptions);
Sigma.Util.onLoad(Sigma.Grid.render(grid));
});
当页面加载时,网格被填充并且一切都很好。但我不想每次都重新加载整个页面。
我成功了用动态重新填充网格:
var grid = Sigma.$grid("SigmaGridID");
grid.refresh(rowData);
Sigma.Grid.render(grid);
但这不会调整列。因此,如果我要添加列,则数据会更新,但会丢失一列。如果我删除一列,则会显示数据,但额外列全部为空。
因此。如何调整列或有没有更好的方法来动态重新呈现和重新显示Sigma Grid?换句话说,我们如何显示Sigma Grid,而不仅仅是在页面加载时?
感谢。
迈克尔
答案 0 :(得分:0)
好吧,最后我发现了一些有用的东西。
当我想重新填充Sigma Grid时,我先做一些清理工作:
Sigma.destroyGrids();
gGrid = null;
var oldSigmaGridDiv = document.getElementById("SigmaGridDiv");
if (!isEmpty(oldSigmaGridDiv))
{
oldSigmaGridDiv.parentNode.removeChild(oldSigmaGridDiv);
}
var newSigmaGridDiv = document.createElement("div");
newSigmaGridDiv.id = "SigmaGridDiv";
var parentDiv = document.getElementById("SigmaGridParentDiv");
parentDiv.appendChild(newSigmaGridDiv);
注意:gGrid只是&#34; var grid&#34;以上我把全局设置为null(为了让垃圾收集器擦除它并确保我们使用新的内存空间)。
比我调用前面的代码(我把它放在一个函数中,可以随意调用它)进行一次更改(最后):
gGrid = new Sigma.Grid(gridOptions);
if (pOnPageLoad)
{
Sigma.Util.onLoad(Sigma.Grid.render(gGrid));
}
else
{
gGrid.render();
}
瞧!
此外,您可以专门针对细胞。下面是一些示例代码,向您展示我们正在更改列的值#34; ColumnA&#34;在Sigma Grid中的所有选定行中包含一个新值:
var newValue = 'Some amazing new value';
var selectedRows = gGrid.selectedRows;
for (var i = 0; i < selectedRows.length; i++)
{
// Retrieving the current selected row's index in the grid.
var indexStr = selectedRows[i].getAttribute("__gt_ds_index__");
// Changing the value.
gGrid.setCellValue('ColumnA', parseInt(indexStr), newValue);
gGrid.refreshRow(selectedRows[i]);
}
gGrid.reload();