SlickGrid multi-level grouping dengan pemilihan level grup

10

status grid saat ini

Saya telah menerapkan kisi-kisi yang apik dengan model pemilihan khusus serta plugin pemilihan kotak centang kustom. Saya juga menambahkan kotak centang level grup untuk memungkinkan pemilihan toggling di level atas. Salah satu persyaratan saya adalah pengelompokan yang diciutkan masih dapat dipilih melalui kotak centang pengelompokan tingkat induk apa pun.

Batu sandungan saya sepertinya adalah saya tidak tahu cara memilih baris yang saat ini tidak terlihat di grup. Grid apik mempertahankan set item yang dipilih secara visual sementara tampilan data grid mempertahankan set lengkap item yang dipilih, terlihat atau tidak. Namun, saya tidak tahu cara mem-pipe data ketika mengklik kotak centang grup dari baris yang diciutkan.

Saya mengkonfigurasi grid saya seperti ini:

let checkboxSelectionModel = new Slick.CheckboxSelectionModel();
this.grid.setSelectionModel(checkboxSelectionModel);

this.grid.registerPlugin(new Slick.Data.GroupItemMetadataProvider());

let onSelectedRowIdsChanged = this.dataProvider.syncGridSelection(this.grid, true, true);

onSelectedRowIdsChanged.subscribe(
  function(e: any, args: any)
    {
      //business logic stuff                    
    }
  );

let groupedCheckboxSelector = new Slick.GroupedCheckboxSelectColumn({
  cssClass: "slick-cell-checkboxsel",
  onSelectedRowIdsChangedHandler: onSelectedRowIdsChanged
});

let columns = this.grid.getColumns();
columns.unshift(groupedCheckboxSelector.getColumnDefinition());
this.grid.setColumns(columns);

this.grid.registerPlugin(groupedCheckboxSelector);

GIST untuk plugin kustom, terlalu lama untuk menyertakan di sini Khususnya, jika Anda melihat garis 57dari slick.checkboxselectionmodel:

$.each(dataItem.rows, function(index, groupRow) {
  var groupRowIndex = _self._grid.getData().getRowById(groupRow.id);
    if (groupRowIndex) {
      selection.push(groupRowIndex);
    }
});

groupRowIndex tidak pernah diselesaikan untuk baris tersembunyi, dan karenanya tidak pernah dipilih. Saya mencoba untuk memperluas grup ketika diklik, kemudian menyelesaikan baris, yang berfungsi tetapi ketika grup itu runtuh sesudahnya, baris yang salah dipilih di grid.

bantuan apa pun akan sangat dihargai!

beberapa catatan:

Julien
sumber
2
saya akan memberikan hadiah besar sesegera mungkin
Julien
1
Ada masalah terbuka # 165 untuk ini, dan saya pikir apa yang akan membantu adalah bahwa Anda atau siapa pun hanya menyediakan perbaikan untuk masalah itu dalam garpu 6pac. Ini adalah proyek Open Source dengan kontribusi dari komunitas, jadi setiap kontribusi membantu membuat lib ini lebih baik selama bertahun-tahun.
ghiscoding

Jawaban:

1

inti untuk plugin yang diperbarui

Solusi fungsional yang saya yakin dapat menempatkan siapa pun yang mencari perilaku serupa di jalur yang benar, namun, saya tidak yakin seberapa baik dari kedua plugin ini akan bekerja secara independen. salah satu persyaratan saya adalah hanya mengizinkan pemilihan baris melalui kotak centang baris.

satu gotcha (yang saya yakin mudah ditingkatkan) adalah bahwa kotak centang tingkat grup masih perlu didefinisikan dalam operator format grup Anda

solusi utama untuk masalah saya adalah untuk memperluas semua grup yang diciutkan ketika membuat tingkat grup memilih / membatalkan pilihan, melakukan rutinitas pilih / batalkan pilihan, kemudian menutup semua grup yang sebelumnya diperluas

EDIT:

Ini gagal ketika grid memiliki sejumlah besar data (baris 10rb). Membuka kembali dengan hadiah.

Sepertinya hit kinerja karena harus memperluas dan menutup begitu banyak kelompok menyebabkan masalah.

Julien
sumber
1
@AmerllicA jawaban ini terlalu dini dan tidak berfungsi dengan kumpulan data besar
Julien
1
@AmerllicA bukan hanya tidak etis untuk menyenangkan seperti ini untuk beberapa hadiah, tetapi sebenarnya OP memulai hadiah setelah jawaban ini diposting dan itu karena OP tidak memiliki hasil yang dia inginkan dengan jawaban ini. Jadi, tolong berhenti memohon seperti ini untuk hadiah yang belum Anda dapatkan dan sebaliknya coba dan bantu OP dengan masalahnya jika Anda punya waktu untuk datang dengan solusi yang baik / lebih baik.
Christos Lytras
@ChristosLytras, saya akan segera menghapus komentar saya, terima kasih atas petunjuknya.
AmerllicA
@ChristosLytras memikirkan hal yang sama, tidak bisa mengatakannya dengan lebih baik
Islam Elshobokshy