DataGrid: Selection
Zurück: Demo-Übersicht
1. Übersicht und Zweck
Status: [Live]. Referenzen: Fluent UI
DetailsList (SelectionMode.multiple), Azure-DevOps-Backlog-Bulk-Edit
(Auswahl-Toolbar), DevExpress-Grid-Checkbox-Selection, VS-Code-Listen
(Ctrl/Shift-Modell).
Vertieft den selection/rowKey-Teil des
dataGrid()-Basiskontrakts:
Einzel- und Mehrfachauswahl von Zeilen, Maus-/Tastaturbedienung, JS-API für
Konsumenten.
2. Voraussetzungen
- dataGrid()-Grundkontrakt bereits verstanden.
- Bei
multi: jede Zeile braucht einen Spalten-Wert, der sie eindeutig identifiziert (fürrowKey).
3. Konzepte
Auswahlzustand ist ansichts-lokal: Filter-, Sortier- oder Seitenwechsel verwirft die Auswahl (bewusst — keine unsichtbar mitlaufende Auswahl über Ansichten hinweg).
Aktive Zeile ≠ Auswahl: wie in Fluent UI DetailsList sind Fokus-Cursor
(Roving-Tabindex) und Auswahl (aria-selected) getrennte Konzepte —
Pfeiltasten bewegen den Fokus, Leertaste/Klick ändert die Auswahl.
4. Erste Schritte
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'single', ]);
Falsch: rowKey auf eine Spalte zeigen lassen, deren Wert nicht
eindeutig ist (z. B. status). Mehrere Zeilen posten dann denselben
selection[]-Wert — der Server kann sie serverseitig nicht
unterscheiden.
5. Verwendung
| Einsatz | Muster |
|---|---|
| Detailansicht der aktiven Zeile (Auxbar, Eigenschaften-Panel) | selection => 'single' + wk-selectionchange-Event |
| Massenaktionen auf mehreren Zeilen | selection => 'multi' + rowKey + bulkActions |
| Pilot-Konsument | wksqliteds Browse-Screen — speist über wk-selectionchange das Live-Nachladen der Auxbar |
6. API-Referenz
$opts['selection'] | Verhalten |
|---|---|
none (Default) | Keine Auswahl-UI |
single | Eine aktive Zeile; 'selectable' => true bleibt als Alias gültig |
multi | Checkbox-Spalte + Auswahl-Toolbar; erfordert $opts['rowKey'] |
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'multi', 'rowKey' => 'id', ]);
7. Parameter, Optionen und Zustände
| Schlüssel | Typ | Bedeutung |
|---|---|---|
$opts['selection'] | 'none'|'single'|'multi' | Auswahlmodell, s. Abschnitt 6 |
$opts['selectable'] | bool | Alias für selection => 'single' |
$opts['rowKey'] | string | Spalten-Key, der eine Zeile eindeutig identifiziert — Pflicht bei multi |
Einzelauswahl (single)
Klick/Pfeiltasten markieren die aktive Zeile (aria-selected,
--wk-admin-row-selected-bg); Strg+C kopiert sie
(data-wk-copy der Zeile gewinnt, sonst der Tab-verbundene Zelltext —
s. Data Export).
Mehrfachauswahl (multi)
- Checkbox-Spalte: erste Spalte mit echten
<input type="checkbox" name="selection[]" value="<rowKey>">-Zellen plus Kopf-Checkbox („alle sichtbaren Zeilen an-/abwählen„, indeterminate bei Teilauswahl). Die Checkboxen liegen in einem umschließenden<form>— die Auswahl funktioniert dadurch vollständig ohne JavaScript (Formular-POST vonselection[]). - Maus: Klick auf die Checkbox togglet;
Strg+Klickauf die Zeile togglet ebenfalls;Shift+Klickwählt den Bereich von der zuletzt aktiven bis zur geklickten Zeile. - Tastatur: Pfeiltasten bewegen die aktive Zeile,
Leertastetogglet sie,Shift+Pfeilerweitert den Bereich,Strg+Awählt alle sichtbaren Zeilen,Strg+Ckopiert alle gewählten Zeilen (zeilenweise, je Zeile gewinnt derendata-wk-copy-Attribut — s. Data Export). Der Container trägtaria-multiselectable=„true“, Zeilenaria-selected.
Selection-API (JavaScript)
wkDataGrid.getSelection(gridEl)→ Array derrowKey-Werte der aktuell gewählten Zeilen.- Bei jeder Änderung feuert das Grid ein bubbelndes
CustomEventwk-selectionchangemitdetail = { keys: string[], count: number }.
document.querySelector('.wk-datagrid').addEventListener('wk-selectionchange', (ev) => { console.log(ev.detail.count, 'Zeilen ausgewählt:', ev.detail.keys); });
Fehlerverhalten
| Bedingung | Verhalten |
|---|---|
selection => 'multi' ohne rowKey | stille Degradierung auf none — kein Fehler |
rowKey zeigt auf nicht-eindeutige Spalte | keine Prüfung durch das Widget — mehrere Zeilen posten denselben Wert, der Server muss das erkennen (s. Abschnitt 4, „Falsch“) |
8. Vollständige Beispiele
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'multi', 'rowKey' => 'id', ]);
9. Einschränkungen und Randfälle
- Die Auswahl gilt je Ansicht: Filter-, Sortier- oder Seitenwechsel verwirft sie (bewusst, s. Abschnitt 3).
- Kein „Auswahl über mehrere Seiten hinweg merken„ — jede neue Ansicht startet mit leerer Auswahl.
10. Accessibility und Kompatibilität
- Vollständiger Überblick: Accessibility (konsolidiert, nicht hier dupliziert).
- Ohne JavaScript bleibt
multivollständig nutzbar (Formular-POST);singleerfordert für die Klick-Markierung JavaScript, native Tab-Navigation bleibt aber immer erhalten.
11. Troubleshooting
Symptom: Checkbox-Spalte fehlt trotz selection => 'multi'.
Ursache: rowKey fehlt in $opts — das Widget degradiert still auf
none.
Lösung: $opts['rowKey'] auf einen eindeutigen Spalten-Key
setzen.
12. Verwandte Themen
- Demo-Übersicht — alle Kategorien
- DataGrid: Data Editing (Massenaktionen) — Auswahl-Toolbar, Bulk-Operationen auf der Selection
- FluentUI: Vertical Grid (Property Grid) — Demo-Übersicht — Eigenschaften-Inspector, der auf
wk-selectionchangereagieren kann - DataGrid: Accessibility — ARIA-/Tastatur-Gesamtüberblick