DataGrid: selection
Nazaj: predstavitveni pregled
1. Pregled in namen
Stanje: [Live]. Reference: Fluent UI
DetailsList (SelectionMode.multiple), vzorec množičnega urejanja
zaostanka Azure DevOps (orodna vrstica izbire), izbira s potrditvenimi
polji v mreži DevExpress, seznami VS Code (model Ctrl/Shift).
Poglobi del selection/rowKey iz
osnovne pogodbe dataGrid():
enojno in večkratno izbiro vrstic, upravljanje z miško/tipkovnico, API JS
za porabnike.
2. Predpogoji
- Že razumljena osnovna pogodba dataGrid().
- Pri
multi: vsaka vrstica potrebuje vrednost stolpca, ki jo enolično opredeli (zarowKey).
3. Koncepti
Stanje izbire je lokalno za pogled: sprememba filtra, razvrščanja ali strani izbriše izbiro (namenoma — brez nevidno vztrajajoče izbire med pogledi).
Aktivna vrstica ≠ izbira: kot v Fluent UI DetailsList sta kazalec
fokusa (roving tabindex) in izbira (aria-selected) ločena koncepta —
puščice premikajo fokus, preslednica/klik spremeni izbiro.
4. Prvi koraki
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'single', ]);
Napačno: usmeriti rowKey na stolpec, katerega vrednost ni
edinstvena (npr. status). Več vrstic bi tedaj poslalo enako vrednost
selection[] — strežnik jih na strani strežnika ne more razlikovati.
5. Uporaba
| Primer uporabe | Vzorec |
|---|---|
| Podroben pogled aktivne vrstice (auxbar, podokno lastnosti) | selection => 'single' + dogodek wk-selectionchange |
| Množična dejanja na več vrsticah | selection => 'multi' + rowKey + bulkActions |
| Pilotni porabnik | zaslon Browse wksqliteds — prek wk-selectionchange napaja ponovno nalaganje auxbarja v živo |
6. Referenca API
$opts['selection'] | Obnašanje |
|---|---|
none (privzeto) | brez uporabniškega vmesnika za izbiro |
single | ena aktivna vrstica; 'selectable' => true ostane veljaven kot vzdevek |
multi | stolpec s potrditvenimi polji + orodna vrstica izbire; zahteva $opts['rowKey'] |
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'multi', 'rowKey' => 'id', ]);
7. Parametri, opcije in stanja
| Ključ | Tip | Pomen |
|---|---|---|
$opts['selection'] | 'none'|'single'|'multi' | model izbire, glej odsek 6 |
$opts['selectable'] | bool | vzdevek za selection => 'single' |
$opts['rowKey'] | string | ključ stolpca, ki enolično opredeli vrstico — obvezno pri multi |
Enojna izbira
Klik/puščice označijo aktivno vrstico (aria-selected,
--wk-admin-row-selected-bg); Ctrl+C jo kopira
(zmaga data-wk-copy vrstice, sicer besedilo celic, povezano s
tabulatorji — glej
Data Export).
Večkratna izbira
- Stolpec s potrditvenimi polji: prvi stolpec s pravimi celicami
<input type="checkbox" name="selection[]" value="<rowKey>">plus potrditveno polje v glavi („izberi/prekliči vse vidne vrstice„, nedoločeno pri delni izbiri). Potrditvena polja so znotraj obdajajočega<form>— s tem izbira deluje popolnoma brez JavaScripta (POST obrazcaselection[]). - Miška: klik na potrditveno polje ga preklopi;
Ctrl+klikna vrstico ga prav tako preklopi;Shift+klikizbere obseg od nazadnje aktivne do kliknjene vrstice. - Tipkovnica: puščice premikajo aktivno vrstico,
preslednicajo preklopi,Shift+puščicarazširi obseg,Ctrl+Aizbere vse vidne vrstice,Ctrl+Ckopira vse izbrane vrstice (vrstico za vrstico; zmaga lastni atributdata-wk-copyvsake vrstice — glej Data Export). Vsebnik nosiaria-multiselectable=„true“, vrstice nosijoaria-selected.
API izbire (JavaScript)
wkDataGrid.getSelection(gridEl)→ polje vrednostirowKeytrenutno izbranih vrstic.- Ob vsaki spremembi mreža sproži mehurčkajoč
CustomEventwk-selectionchangezdetail = { keys: string[], count: number }.
document.querySelector('.wk-datagrid').addEventListener('wk-selectionchange', (ev) => { console.log(ev.detail.count, 'vrstic izbranih:', ev.detail.keys); });
Obnašanje ob napaki
| Pogoj | Obnašanje |
|---|---|
selection => 'multi' brez rowKey | tiho degradira na none — brez napake |
rowKey kaže na needinstven stolpec | gradnik ne preveri — več vrstic pošlje enako vrednost, strežnik mora to zaznati (glej odsek 4, „napačno“) |
8. Popolni primeri
echo $widgets->dataGrid($columns, $rows, [ 'selection' => 'multi', 'rowKey' => 'id', ]);
9. Omejitve in robni primeri
- Izbira velja na pogled: sprememba filtra, razvrščanja ali strani jo izbriše (namenoma, glej odsek 3).
- Brez „pomnjenja izbire med stranmi„ — vsak nov pogled se začne s prazno izbiro.
10. Dostopnost in združljivost
- Popoln pregled: accessibility (konsolidirano, tu ni podvojeno).
- Brez JavaScripta
multiostane povsem uporaben (POST obrazca);singleza označevanje s klikom zahteva JavaScript, nativna navigacija s tabulatorjem pa je vedno ohranjena.
11. Odpravljanje težav
Simptom: stolpec s potrditvenimi polji manjka kljub
selection => 'multi'.
Vzrok: rowKey manjka v $opts — gradnik tiho degradira na
none.
Rešitev: nastavite $opts['rowKey'] na edinstven ključ
stolpca.
12. Sorodne teme
- predstavitveni pregled — vse kategorije
- DataGrid: Data Editing (množična dejanja) — orodna vrstica izbire, množične operacije na izbiri
- FluentUI: Vertical Grid (Property Grid) — predstavitveni pregled — inšpektor lastnosti, ki se lahko odzove na
wk-selectionchange - DataGrid: accessibility — popoln pregled ARIA/tipkovnice