Trenutno dejavna stran: start » sl » Interna dokumentacija » Razširitve DokuWikija (WvdS) » FluentUI (knjižnica oblikovalskega sistema) » FluentUI: reference komponent » FluentUI: namizni DataGrid — predstavitveni pregled » DataGrid: Data Export

DataGrid: Data Export

1. Pregled in namen

Stanje: kopiranje vrstice [Live]; izvoz CSV je primer uporabe [Live] obstoječe pogodbe bulkActions (brez lastne kode gradnika); namenski pomočnik za izvoz je [Live]. Referenca: DevExpress ASPxGridView „Data Export„ (CSV/XLSX/PDF).

2. Predpogoji

  • Za Copy/Copy with Headers: rowActions() nastavljen na mreži (odsek 6).
  • Za izvoz CSV: že razumljena selection (multi) + bulkActions.

3. Koncepti

Brez vgrajene funkcije izvoza — ponovno uporabljeni dve obstoječi pogodbi: kopiranje uporablja rowActions()/kontekstni meni, izvoz CSV uporablja bulkActions. dataGrid() sam ne ustvari datoteke CSV — to ostane stvar namenske končne točke strežnika.

4. Prvi koraki

$rowActions = function (array $row) {
    return $this->rowActions([
        ['label' => 'Copy', 'element' =>
            '<button type="button" data-wk-copy="' . hsc($row['name']) . "\t" . hsc($row['status']) . '">Copy</button>'],
    ]);
};
 
echo $widgets->dataGrid($columns, $rows, ['rowActions' => $rowActions]);

Napačno: dovoliti, da končna točka izvoza izvozi nefiltriran celoten nabor namesto izbire, ker je bil „selection[] prazen, torej izvozimo vse“ (glej odsek 7, varnost).

5. Uporaba

Potreba Vzorec
Posamezna vrstica v odložišče Copy/Copy with Headers prek rowActions() — odsek 6
Izbrane vrstice kot datoteka Izvoz CSV kot množično dejanje prek bulkActions — odsek 6
Posplošen pomočnik za izvoz exportRows() — odsek 8

6. Referenca API

[Live] Copy / Copy with Headers

Prek rowActions() + scripts/contextmenu.js (api → rowActions()) vsaka vrstica izbirno nosi kontekstni meni s „Copy„/„Copy with Headers“:

$rowActions = function (array $row) {
    return $this->rowActions([
        ['label' => 'Copy', 'element' =>
            '<button type="button" data-wk-copy="' . hsc($row['name']) . "\t" . hsc($row['status']) . '">Copy</button>'],
        ['label' => 'Copy with Headers', 'element' =>
            '<button type="button" data-wk-copy-headers="1">Copy with Headers</button>'],
    ]);
};
 
echo $widgets->dataGrid($columns, $rows, ['rowActions' => $rowActions]);

[Live] izvoz CSV kot množično dejanje

Obstoječa pogodba bulkActions (Data Editing (množična dejanja)) uporabljena na končni točki izvoza:

echo $widgets->dataGrid($columns, $rows, [
    'selection'   => 'multi',
    'rowKey'      => 'id',
    'bulkActions' => [
        ['label' => 'Izvoz CSV izbire', 'element' =>
            '<button type="submit" formaction="' . hsc(wl($ID, ['do' => 'export-csv'])) . '" class="wk-btn wk-btn--accent">Izvoz CSV izbire</button>'],
    ],
]);

7. Parametri, opcije in stanja

Atribut Učinek
data-wk-copy besedilo za odložišče pri Copy (edina dodatna funkcija v scripts/contextmenu.js brez ustreznice brez JS — odložišče je v osnovi funkcija odjemalca)
data-wk-copy-headers Copy, vključno z glavami stolpcev
Ctrl+C pri aktivnem modelu izbire kopira neposredno, brez odpiranja kontekstnega menija: pri selection => 'single' aktivno vrstico, pri 'multi' vse izbrane vrstice, vrstico za vrstico (ločeno z \n)

Varnost: končna točka strežnika za izvoz znova preveri ključe selection[] glede na ACL/obstoj (enako pravilo kot pri vsakem množičnem dejanju, glej množična dejanja → stran strežnika), nato izpiše Content-Type: text/csv + Content-Disposition: attachment s preverjenimi vrsticami. Prazen POST selection[] je treba obravnavati kot napako (sporočilo o stanju „ni izbire„), ne kot „izvozi vse“ — sicer uporabnik po nesreči izvozi podatke, ki jih ni zahteval.

8. Popolni primeri: namenski pomočnik za izvoz [Live]

exportRows() posploši zgornji vzorec CSV, tako da vsakemu klicatelju ni treba znova zgraditi ubežanja CSV:

  • exportRows(array $columns, array $rows, string $format = 'csv'): string v helper_plugin_wkfluentui_widgets — sprejme enake strukture $columns/$rows kot dataGrid() (en podatkovni model, dva prikaza) in ustvari CSV v obliki RFC-4180: konci vrstic CRLF, vsaka celica v narekovajih, podvojeni narekovaji, ločilo podpičje; celice z uvodnim =/+/-/@ dobijo uvodni apostrof proti vbrizgu formul v Excel/LibreOffice (CWE-1236). Celice ['html' => …] se izvozijo kot njihova besedilna vsebina, nikoli kot oznake.
  • format: le csv — vsaka druga vrednost vrne prazen niz; XLSX/PDF ostajata zunaj te pogodbe gradnika (zahtevala bi zunanje knjižnice).
// v končni točki izvoza, PO ponovni validaciji ACL/obstoja izbire:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="export.csv"');
echo $widgets->exportRows($columns, $izbraneVrstice);
exit;

9. Omejitve in robni primeri

  • exportRows() ustvari le niz CSV — glave HTTP, ime datoteke in ponovna validacija ACL izbire ostanejo stvar končne točke (odsek 7).
  • Brez izvoza XLSX/PDF (odsek 8).

10. Dostopnost in združljivost

  • navigator.clipboard.writeText() zahteva varen kontekst (HTTPS ali localhost) — na nevarnih povezavah HTTP kopiranje na strani odjemalca ni na voljo, kontekstni meni tedaj ne prikaže te možnosti.
  • Brez JavaScripta Copy/Copy with Headers ni dosegljiv (dokumentirana izjema od sicer veljavnega načela brez JS, glej odsek 7).

11. Odpravljanje težav

Simptom: izvoz CSV ustvari prazno/nepričakovano datoteko.

Vzrok: končna točka izvoza napačno obravnava prazen POST selection[] kot „izvozi vse„ namesto kot napako.

Rešitev: preverite logiko končne točke glede na odsek 7 (varnost) — prazna izbira mora vrniti sporočilo o napaki, nikoli nefiltriran celoten izvoz.

12. Sorodne teme

sl/wiki/dwe/wkfluentui/component/datagrid/data-export.txt · Zadnja sprememba: uporabnika 0.0.0.0