使用Angular 4(打字稿),我使用ag-grid 12.0.2有一些如下代码。我试图做的就是加载我的网格并自动(以编程方式)选择第一行。
:
this.gridOptions = ....
suppressCellSelection = true;
rowSelection = 'single'
:
loadRowData() {
this.rowData = [];
// build the row data array...
this.gridOptions.api.setRowData(this.rowData);
let node = this.gridOptions.api.getRowNode(...);
// console logging here shows node holds the intended row
node.setSelected(true);
// console logging here shows node.selected == true
// None of these succeeded in highlighting the first row
this.gridOptions.api.redrawRows({ rowNodes: [node] });
this.gridOptions.api.redrawRows();
this.gridOptions.api.refreshCells({ rowNodes: [node], force: true });
选择了第一个节点,但该行拒绝在网格中突出显示。否则,通过鼠标选择行可以正常工作。此代码模式与此处的示例代码相同:https://www.ag-grid.com/javascript-grid-refresh/#gsc.tab=0但不起作用。
抱歉,我不允许发布实际代码。
答案 0 :(得分:2)
onGridReady表示网格已准备就绪,但 data 尚未就绪。 使用onFirstDataRendered方法:
<ag-grid-angular (firstDataRendered)="onFirstDataRendered($event)">
</ag-grid-angular>
onFirstDataRendered(params) {
this.gridApi.getDisplayedRowAtIndex(0).setSelected(true);
}
这将自动选择网格中的第一行。
答案 1 :(得分:0)
我有一个类似的问题,得出的结论是在加载行之前调用了onGridReady()。仅仅因为 grid 准备就绪并不意味着您的 rows 准备就绪。(我使用的是ag-grid社区版本19)解决方案是设置api事件处理程序数据加载后。出于演示目的,我将使用一个简单的setTimeout()来确保在与网格进行交互之前已经过去了一段时间。在现实生活中,您将需要使用一些在加载数据时触发的回调。
我的要求是处理程序在窗口调整大小时调整网格大小(与您不相关),并且单击或导航到单元格突出显示整行(与您有关),并且我还注意到与所选单元格未突出显示。
setUpGridHandlers({api}){
setTimeout(()=>{
api.sizeColumnsToFit();
window.addEventListener("resize", function() {
setTimeout(function() {
api.sizeColumnsToFit();
});
});
api.addEventListener('cellFocused',({rowIndex})=>api.getDisplayedRowAtIndex(rowIndex).setSelected(true));
},5000);
}
答案 2 :(得分:0)
执行此操作的是setSelected(true)
。
我们使用的是MasterDetail feature,它是一个嵌套的网格,在展开一行时,我们需要将选择内容更改为展开的内容。
扩展行已在
中处理detailCellRendererParams: {
getDetailRowData: loadNestedData,
detailGridOptions: @nestedDetailGridOptionsFor('child'),
}
连同loadNesteddata
一起,我们得到params
的原因是可以选择扩展行为
params.node.parent.setSelected(true)
希望这会有所帮助。
答案 3 :(得分:-1)
由于您要在页面加载中选择第一行,因此可以在构造函数中进行操作。但是你的gridApi应该在OnGridReady($ event)方法中初始化
public int countCode(String str) {
int count = 0;
String result = "";
boolean yes = true;
for (int i = 0; i < str.length(); i++) {
// yes = str.charAt(i+3);
if (str.length() >= 3) {
if (str.charAt(i) == 'c' && str.charAt(i + 1) == 'o' && str.charAt(i + 3) == 'e')
count++;
}
}
return (count);
}