Ag grid Выровнять столбцы сетки Master Detail - PullRequest
0 голосов
/ 19 января 2019

Я следую за основной деталью 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имя), соответствующее главному столбцу «имя», переупорядочение, кажется, не работает,
...