J'ai une grille Slickgrid (dataView) remplie avec des données, un filtre rapide (exemple-header-row.html), des sélecteurs de ligne checkbox (exemple-checkbox-row-select.html) avec syncGridSelection (https://github.com/mleibman/SlickGrid/wiki/DataView#synchronizing-selection--cell-css-styles). Tout fonctionne bien.Filtrer par cases à cocher/lignes déjà sélectionnées
Par défaut, les filtres rapides placent une zone de saisie dans la colonne de la case à cocher. Ce serait bien si l'on pouvait filtrer par cases à cocher (lignes) déjà sélectionné, mais je ne pense pas que le texte d'entrée est possible pour le filtrage? Donc, à la place, j'ai désactivé l'entrée du filtre uniquement dans la colonne de la case à cocher et je l'ai replacé avec un bouton bascule que j'espère pouvoir filtrer par cases à cocher/lignes déjà sélectionnées.
J'ai vu du code avec grid.getSelectedRows() mais je ne sais pas comment l'utiliser dans le DataView, en particulier avec la fonction syncGridSelection.
Mon but est de basculer/filtrer les cases cochées et désactivées dans la grille dataView pour les visualiser. Suggestion de code, des exemples seraient très appréciés.
Peut-être que je dois décrire ce que je cherche différemment. Disons que j'ai 10 000 lignes de données dans ma grille. Un utilisateur final sélectionne la case à cocher/numéro de ligne 1, le numéro de ligne 450 et le numéro de ligne 999. Une fois la sélection des lignes terminée, ils voudront probablement vérifier quelles lignes ils ont sélectionnées. Au lieu de faire défiler les 10 000 enregistrements pour voir ce qu'ils ont sélectionné, il serait bon de filtrer sur les lignes qu'ils ont déjà sélectionnées. Une fois filtrée, la grille ne montrerait que 3 lignes, les lignes 1, 450 et 999. Lorsque le filtre est supprimé, tous les 10 000 enregistrements s'afficheront.
J'ai abordé ce problème au niveau du filtre mais j'ai du mal à le faire. Utilisation d'un filtre basé sur du texte: Le premier exemple ci-dessous serait la lecture de l'enfant et la vérification de sa vérification.
Le deuxième exemple ci-dessous vérifie si "this" numéro de ligne est dans le tableau de grid.getSelectedRows(). Le problème avec la deuxième approche est que je ne suis pas sûr de savoir comment obtenir le numéro de ligne actuel que nous vérifions.
Une suggestion sur le code ci-dessous?
function filter(item) {
for (var columnId in columnFilters) {
if (columnId !== undefined && columnId != "_checkbox_selector" && columnFilters[columnId] !== "") {
var c = grid.getColumns()[grid.getColumnIndex(columnId)];
if (item[c.field] != columnFilters[columnId]) {
return false;
}
} else if (columnId == "_checkbox_selector") {
/* something like....
if input checkbox is NOT checked
return false;
*/
}
}
return true;
}
- OU -
function filter(item) {
var rows = grid.getSelectedRows();
for (var columnId in columnFilters) {
if (columnId !== undefined && columnId != "_checkbox_selector" && columnFilters[columnId] !== "") {
var c = grid.getColumns()[grid.getColumnIndex(columnId)];
if (item[c.field] != columnFilters[columnId]) {
return false;
}
} else if (columnId == "_checkbox_selector") {
/* something like....
var isFound = rows.indexOf(this.row);
if (isFound == -1) {
return false;
}
*/
}
}
return true;
}
Génial. Une autre approche parfois utilisée consiste à trier la grille avec les lignes sélectionnées en haut. C'est une façon d'afficher en même temps l'affichage sélectionné et non sélectionné, bien qu'il soit un peu difficile de déterminer quand il faut déplacer les lignes nouvellement sélectionnées ou désélectionnées vers leur nouvelle position. –
Ma réponse originale a fonctionné, mais pas quand les autres filtres avaient aussi une entrée. J'ai corrigé ma réponse/code ci-dessus qui fonctionne maintenant avec d'autres filtres d'entrée. @ Ben-McIntyre –