Я следую за основной деталью Ag-Grid документов и пытаюсь выровнять и выровнять столбцы основной и подробной сетки, как указано в выровненной сетке документов,Но, похоже, он не работает с основным макетом детализации.
Я пошел на отладку Ag-grid alignedGridService
и обнаружил, что переданная конфигурация сетки должна иметь ссылку API сетки , которая используетсядля привязки событий сетки к обеим сеткам,
// iterate through the aligned grids, and pass each aligned grid service to the callback
const otherGrids = this.gridOptionsWrapper.getAlignedGrids();
if (otherGrids) {
otherGrids.forEach((otherGridOptions: GridOptions) => {
if (otherGridOptions.api) {
const alignedGridService = otherGridOptions.api.__getAlignedGridService();
callback(alignedGridService);
}
});
}
, что не относится к сеткам подробностей, так как они не имеют ссылок на API, когда выполняется вышеуказанный код, я думаю, вероятно, потому что сетка подробностей создается только тогда, когда требуетсяи, во-вторых, его конфигурация будет повторно использоваться для каждой подробной сетки, поэтому их объекты API не являются частью конфигурации, а являются частью главной конфигурации, согласно документам, ссылка на подробный API может быть получена с помощью
// lookup a specific DetailGridInfo by id, and then call stopEditing() on it
var detailGridInfo = masterGridOptions.api.getDetailGridInfo('someDetailGridId');
detailGridInfo.api.stopEditing();
// iterate over all DetailGridInfo's, and call stopEditing() on each one
masterGridOptions.api.forEachDetailGridInfo(function(detailGridInfo) {
console.log("detailGridInfo: ", detailGridInfo);
// then e.g. call stopEditing() on that detail grid
detailGridInfo.api.stopEditing();
});
а с другой стороны, вот что я пытаюсь сделать, следуя документам по выровненным сеткам,
/** HIDE SCROLL FOR DETAIL GRID **/
// detailConfig.suppressHorizoHntalScroll = true;
/** SET DETAIL GRID AS THE ALIGNED GRID */
this.masterGridOptions.alignedGrids = [this.detailGridOptions];
, что в данном случае явно не так, я думаю, мне, возможно, придется применить собственную реализацию для связыванияоба события сетки вместе, но я не уверен, с чего начать, или даже если это возможно,
Во-вторых, кажется, чтоКажется, что tting autoHeight: true
не влияет на высоту сетки деталей, в основном я пытаюсь освободить полосы прокрутки сетки деталей, потому что в ней не должно быть много строк.В соответствии с документами вы можете указать статическую высоту или высоту во время выполнения, но нет возможности автоматически определить высоту,
// option 1 - fixed detail row height, sets height for all details rows
masterGridOptions.detailRowHeight = 500;
// option 2 - dynamic detail row height, dynamically sets height for all rows
masterGridOptions.getRowHeight = function (params) {
var isDetailRow = params.node.detail;
if (isDetailRow) {
var detailPanelHeight = params.data.children.length * 50;
// dynamically calculate detail row height
return detailPanelHeight;
} else {
// for all non-detail rows, return 25, the default row height
return 25;
}
}
В моем случае в ячейках может быть более длинная длина текстов.и я хочу, чтобы строки автоматически переносились и имели переменную высоту, а не ограничивали их определенной высотой, по причине, по которой я использовал autoHeight
, но это также, похоже, не оказывает здесь никакого влияния.
здесь stackBlitz , который демонстрирует обе проблемы, можно сказать, что компоновка Master / Detail, вероятно, не подходит для данного случая использования, и вместо этого может быть полезна просто компоновка дерева, но при условии, что сетки деталей могут иметь своиИмея собственные заголовки и предоставляя вещи, недоступные в древовидном представлении, я склонен к использованию основного / подробного вида.
Любая помощь, которая может помочь мне решить обе эти проблемы, очень ценится.
РЕДАКТИРОВАТЬ: Я получил выровненные сетки для частичной работы с помощью:
detailGridOptions.alignedGrids = [masterGridOptions];
detailGridOptions.onGridReady = (params) => {
/** SET DETAIL GRID AS THE ALIGNED GRID */
masterGridOptions.api.alignedGrids = [];
masterGridOptions.api.forEachDetailGridInfo((params: DetailGridInfo, index) => {
masterGridOptions.api.alignedGrids.push(params);
});
}
ПРИМЕЧАНИЕ: Из-за виртуальной прокрутки сетки пришлось обновлять masterGridOption.alignedGrids
для каждой детали onGridReady
обратный вызов, поскольку даже развернутые сетки деталей разрушаются и генерируются заново.
Теперь, помимо того, что строки детализации и основной сетки действительно следуют autoHeight, единственное, что мне хотелось бы, это также выровнять не общие столбцы между мастером и деталями, например,
- изменение размера столбца имени мастера должно изменить размер имени деталиили столбец с фамилией, чтобы они оставались синхронизированными и наоборот
- В столбце с именем скрытого мастера должны скрываться оба столбца: f name и l name
- Также из-за этих двух вложенных столбцов (f name и lимя), соответствующее главному столбцу «имя», переупорядочение, кажется, не работает,