AG Grid - 抑制特定 column/cell 内的行选择
AG Grid - Suppress row selection inside a particular column/cell
使用 AG Grid,我需要创建一个 table 行 selection 单击,但单击某些单元格不会导致行被 selected。
到目前为止,我的最佳想法是当鼠标悬停在非 selecting 单元格上时禁用单击行 selection。类似于:
gridOptions.onCellMouseOver = (event) => {
if (/*cell is from non-select column*/ )
this.gridOptions.suppressRowClickSelection = true;
}
gridOptions.onCellMouseOut = (event) => {
if (/*cell is from non-select column*/ )
this.gridOptions.suppressRowClickSelection = false;
}
唯一的问题是 onCellMouseOver 和 Out 似乎没有及时触发;如果您从 select 一行快速移动到在无 select 单元格内单击,该行 selection 仍会触发。我有一个额外的 onCellClicked 函数,它会触发并显示 gridOptions.suppressRowClickSelection 按预期设置为 true,但似乎 属性 没有及时设置,因为点击速度太快。
如果有人知道解决此 onMouseOver 计时问题的方法,我很想知道。或者,如果总体上有更好的方法来实现此功能,我会全力以赴。
谢谢
这是一种方法:
this.gridOptions = {
suppressRowClickSelection: true,
onCellClicked: (e) => {
if (e.column.colId !== 'name') { // cell is from non-select column
e.node.setSelected(true);
}
}
};
基本上,我们仅在单击符合条件的单元格时才手动 select 该行。
我使用这个解决方法是因为我需要在点击时显示全宽行,但在点击第一列后我应该导航
<ag-grid-angular (gridReady)="onGridReady($event)" (rowClicked)="onRowClick($event)">
onRowClick(params: RowClickedEvent) {
if(this.gridApi.getFocusedCell().column.getColId() === 'number'){
this.goToItem(params.data.id);
return;
}
//Other row logic
}
当然,您必须按照示例中的定义定义 gridAPI 变量。
gridApi: GridApi;
gridColumnApi: ColumnApi;
onGridReady(params: any) {
this.gridApi = params.api;
this.gridColumnApi = params.columnApi;
}
使用 AG Grid,我需要创建一个 table 行 selection 单击,但单击某些单元格不会导致行被 selected。
到目前为止,我的最佳想法是当鼠标悬停在非 selecting 单元格上时禁用单击行 selection。类似于:
gridOptions.onCellMouseOver = (event) => {
if (/*cell is from non-select column*/ )
this.gridOptions.suppressRowClickSelection = true;
}
gridOptions.onCellMouseOut = (event) => {
if (/*cell is from non-select column*/ )
this.gridOptions.suppressRowClickSelection = false;
}
唯一的问题是 onCellMouseOver 和 Out 似乎没有及时触发;如果您从 select 一行快速移动到在无 select 单元格内单击,该行 selection 仍会触发。我有一个额外的 onCellClicked 函数,它会触发并显示 gridOptions.suppressRowClickSelection 按预期设置为 true,但似乎 属性 没有及时设置,因为点击速度太快。
如果有人知道解决此 onMouseOver 计时问题的方法,我很想知道。或者,如果总体上有更好的方法来实现此功能,我会全力以赴。
谢谢
这是一种方法:
this.gridOptions = {
suppressRowClickSelection: true,
onCellClicked: (e) => {
if (e.column.colId !== 'name') { // cell is from non-select column
e.node.setSelected(true);
}
}
};
基本上,我们仅在单击符合条件的单元格时才手动 select 该行。
我使用这个解决方法是因为我需要在点击时显示全宽行,但在点击第一列后我应该导航
<ag-grid-angular (gridReady)="onGridReady($event)" (rowClicked)="onRowClick($event)">
onRowClick(params: RowClickedEvent) {
if(this.gridApi.getFocusedCell().column.getColId() === 'number'){
this.goToItem(params.data.id);
return;
}
//Other row logic
}
当然,您必须按照示例中的定义定义 gridAPI 变量。
gridApi: GridApi;
gridColumnApi: ColumnApi;
onGridReady(params: any) {
this.gridApi = params.api;
this.gridColumnApi = params.columnApi;
}