Édition
Vue d'ensemble
rs-grid prend en charge l'édition de cellules en ligne. Double-cliquez sur une cellule (ou appuyez sur Entrée sur une cellule sélectionnée) pour commencer l'édition. La couche web superpose un élément DOM input par-dessus la cellule du canvas.
Cycle de vie de l'édition
Démarrer l'édition
La grille stocke la valeur actuelle de la cellule dans un snapshot EditCell
afin de pouvoir la restaurer en cas d'annulation.
Valider
La nouvelle valeur est écrite dans la source de données (ou dans la couche de patches pour les sources en lecture seule). L'édition est enregistrée dans l'historique d'annulation.
Annuler
Restaure la valeur d'origine. Aucune entrée d'annulation n'est créée.
Éditeurs de cellules
Le type d'éditeur est contrôlé par ColumnDef::editor :
Champ texte
Lorsque editor vaut Some(CellEditor::Text), un simple <input type="text"> est affiché :
Pas d'éditeur (None)
Lorsque editor vaut None (valeur par défaut pour une nouvelle colonne),
le double-clic déclenche CancelEdit et n'affiche aucune superposition DOM.
Pour activer l'édition texte sur une colonne, définissez editor explicitement :
Menu déroulant
Pour les colonnes à choix fixes, utilisez CellEditor::Select :
Chaque SelectOption possède :
value— valeur stockée dans la cellule lors de la validationlabel— texte affiché dans le menu déroulanticon— URL d'icône optionnelle affichée à gauche du libellé
Support de l'annulation
Les éditions de cellules sont automatiquement enregistrées dans l'historique d'annulation. Appuyez sur Ctrl+Z pour annuler ou Ctrl+Y pour rétablir. Voir Annuler et Rétablir pour plus de détails.
Édition avec des sources de données en lecture seule
Même FnDataSource (qui n'a pas de set_cell) prend en charge l'édition —
la nouvelle valeur est stockée dans GridModel::patches, qui remplace la
source de données pour cette cellule.
Verrouillage par cellule
ColumnDef::editable verrouille une colonne entière. Pour un contrôle plus
fin — verrouiller des cellules individuelles selon les données de la
ligne — définissez un prédicat dynamique avec .editable_when(...) :
Le prédicat reçoit l'index de ligne et le GridModel
complet, ce qui lui permet de lire la valeur de n'importe quelle colonne
de cette ligne — pas seulement la sienne — pour décider si une cellule est
éditable. Ceci reproduit le callback colDef.editable d'AG Grid.
Vérifié uniquement quand le flag statique editable est true — si une
colonne est en lecture seule statiquement, le prédicat n'est jamais
appelé :
Quand une cellule résout à non-éditable, rs-grid-web affiche un curseur
not-allowed au survol et rend la cellule avec un fond et une couleur de
texte thémés (Theme::locked_cell_bg / Theme::locked_cell_text,
variables CSS --rs-grid-locked-cell-bg / --rs-grid-locked-cell-text —
voir Theming).
Voir EditablePredicate pour la référence complète du type.
Décoration par cellule
Parfois une règle métier concerne deux colonnes et aucune des deux n'est
invalide en isolation — par ex. une ligne est incohérente si l'une d'une
paire fichier/libellé est remplie et l'autre vide. Aucune des deux colonnes
ne peut exprimer ça avec la Validation seule,
puisque chacune accepte une valeur vide isolément. Attachez un décorateur
dynamique avec .decorated_when(...) pour signaler la cellule de façon
persistante, au repos — pas seulement pendant son édition :
Comme .editable_when(...), la closure reçoit l'index de ligne et le
GridModel complet, ce qui lui permet de lire la
valeur de n'importe quelle autre colonne pour cette ligne. Contrairement à
l'éditabilité ou à la validation, la décoration ne bloque jamais rien —
elle est purement cosmétique, et il n'y a pas de garde statique pour la
court-circuiter.
La couleur de bordure et la teinte de fond sont des valeurs RGBA que vous
fournissez directement dans CellDecoration — elles ne sont pas lues
depuis le thème. Seule l'épaisseur de la bordure est thémée
(--rs-grid-decoration-border-width), car elle est uniforme pour toutes
les cellules décorées, quelle que soit la couleur choisie.
Voir CellDecoration et CellDecorator pour la référence complète du type.
Validation
CommitEdit (ainsi que la commande live ValidateEdit déclenchée à chaque
frappe) passent par une validation par colonne avant que la valeur soit
acceptée. Voir Validation pour les règles
déclaratives, la politique bloquer-ou-annuler, et les hooks d'interface
pour le retour live.

