ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid
- Petr Parolek
- Člen | 408
Petr Parolek napsal(a):
POZOR na BC break ve verzi 6.9.3
$inlineAdd->onSubmit[] = function (ArrayHash $values): void { bdump($values); $this->flashMessage('Record was added!', 'success'); $this->redrawControl('flashes'); };
předtím byl typeint Nette\Utils\ArrayHash a nyní je typehint array
@PavelJanda díky za opravu ve verzi 6.9.4.
- Tomáš Vodička
- Člen | 16
jAkErCZ napsal(a):
Ahoj všem,
je nějaká možnost jak v datagridu obarvit daný řádek? Třeba pokud v db je neaktivní bude červený a pokud je aktivní bude zelený?Díky všem za rady.
Třídu řádku můžeš ovlivnit pomocí setRowCallback()
- d@rkWolf
- Člen | 140
Zdravím, sem úplně zoufalý, nenarazil někdo na situaci, že mu addColumnStatus vypíše jen číslo, místo vytvoření toho buttonu na přepnutí stavu?
Už jsem datagrid párkrát použil a dycky to fungovalo, jediný rozdíl je o pár desetinek novější Nette oproti minulému použití a to, že teď tahám data přes Doctrine, místo Nette Database. Řádek se vypíše, tlačítka v Action se vytvoří, ale ve sloupci pro status mám místo buttonu „1“(1/0 – zapnuto/vypnuto)
Je úplně fuk, co tam dám, na nic to nereaguje, ani přesně skopírovaný kód z dokumentace jen úpravou názvu sloupce nevytvoří tlačítko.
- Ozzrel
- Generous Backer | 19
Ahoj, může mi někdo poradit jak se inlineeditu řekne že to je blbě :-) a má probliknout červeně a ne zeleně. V kodu jsem to trochu vyčuchal ale nevím jak mu nahlásit po validaci že to je prostě špatně a má použít třídu ‚edited-error‘.
Dokumentace jen zmiňuje, že to zeleně blikne a vlastní render. Bohatě mi stačí vestavěné funkce a proto se pídím po tomhle.
- Pavel Janda
- Člen | 965
@d@rkWolf Ahoj, mohl bys, pls, udělat nějaké sandbox-like repo na githubu? Nebo alespoň gist? Abych si to mohl rozjet a vyzkoušet. Zatím jsem se s tím nesetkal. Kdyby se to povedlo, usnadnilo by mi to testování. Díky moc! (Můžeš použít https://github.com/…rid-skeleton)
- Pavel Janda
- Člen | 965
@Ozzrel Teoreticky by mělo stačit vrátit nějaký error http kód. Obslužný JavaScript vypadá cca takto:
$.nette.ajax({
url: cell.data('datagrid-editable-url'),
data: {
value: value
},
type: 'POST',
success: function(payload) {
// ...
return cell.addClass('edited');
},
error: function() {
cell.html(cell.data('originalValue'));
return cell.addClass('edited-error');
}
});
Editoval Pavel Janda (22. 2. 10:13)
- d@rkWolf
- Člen | 140
@PavelJanda v pátek jsem s v tom dál vrtal, odpojil jsem datasource Doctriny a místo něj připojil obyčejné pole(stejný formát, jen sem ořezal pár sloupců), na nic dalšího jsem nešáhnul, jen záměna v setDatasource(pole místo funkce z repozitáže s queryBuilderem) a když sem dal F5, přepínač stavu tam byl…no a potom jsem vyměnil zpět zase tu funkce s queryBuilderem…a ten přepínač tam zůstal a od té doby tam je, nechápu, jak je něco takového možné…
jediné vysvětlení, co mě napadalo, je v addColumnStatus->addOption sem měl ten stavový parametr ve špatném formátu, ale nechápu, jak by se přehozením na pole změnil…mám to v Doctrine Entitě zadané jako column type boolean, v DB je to vygenerované jako tinyInt, zkoušel jsem tam dávat true, ‚true‘, 1, ‚1‘, nevím jaké další varianty a nic-a teď mi to funguje s použitím true…
cache sem mezitím smazal x-krát, takže ničím v cache to být nemohlo
Editoval d@rkWolf (24. 2. 15:57)
- Ozzrel
- Generous Backer | 19
@PavelJanda tak jsem to zkoušel všelijak a úspěch se
nedostavil.
Pak jsem zjistil omylem, že to funguje a stačí die(); ale
bohužel jen u „malého“ inlineeditu.
Stejný postup u „velkého“ nefunguje a editace se chová tak, že se
vrátí response ale editace se neukončí a tlačítko
SAVE vypadá nefunkčně pro uživatele bez udání
důvodu.
$inlineEdit->onSubmit[] = function ($id, $values) {
try {
$this->model->findNeco()->get($id)->update($values);
} catch ( \Nette\Database\UniqueConstraintViolationException $e) {
$this->flashMessage('Už je to v databázi', 'error');
$this->redrawControl('flash');
die();
}
};
No nechám zelenou a ve flashmassage chybu co se děje. Užíci to poberou :)
datagrid 6.9.4 + Naja 2.1.4
Editoval Ozzrel (25. 2. 19:31)
- Pavel Janda
- Člen | 965
@Ozzrel Velký inline edit funguje jinak, přes nette forms. Zkusil bych v takovém případě jednoduše přidat error do formu (Form/Input::AddError)
- Felix
- Nette Core | 1155
Bootstrap 5
Pripravil jsem PR s aktualizaci bootstrapu na verzi 5.0 (https://github.com/…id/pull/1021).
Zaroven jsem upravil i ukazkovy skeleton contributte/datagrid-skeleton (https://github.com/…eton/pull/45).
Prosim o otestovani. Diky.
- Melebius
- Člen | 10
Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer
(k formátování měny) a zároveň má být editovatelný
(setEditableInputType()
). To v zásadě funguje, ale na rozdíl od
sloupců bez rendereru se při otevření editačního pole nepředvyplní
stávající hodnota. Je možné takovému editačnímu poli nějak nastavit
hodnotu, která se má předvyplnit? Představoval bych si třeba metodu
setEditableValue()
…
Příklad: V gridu se vypisuje 10 Kč
, když na to kliknu,
mělo by se objevit 10
, ale místo toho se objeví jen
prázdné pole.
- Šaman
- Člen | 2591
Nedaří se mi rozchodit Datagrid s Naja2. A protože se v tomto vlákně
už hodně špatně dohledávají už vyřešené problémy, položil
jsem to jako dotaz ve vlastním vlákně. Ale týká se to nejspíš jen
Datagridu. Aktuálně mi funguje jen s nette.ajax
a Naja 1.8.x
- NouF
- Backer | 31
Ahoj,
chápu dobře že tento řádek generuje data attribute pro multi tlačítka?
https://github.com/…tiAction.php#L63
Jestli ano, tak bootstrap 5 vyžaduje tuto podobu „data-bs-toggle“
- Melebius
- Člen | 10
Chtěl bych vás poprosit o radu: Mám sloupec, který používá renderer (k formátování měny) a zároveň má být editovatelný (
setEditableInputType()
). To v zásadě funguje, ale na rozdíl od sloupců bez rendereru se při otevření editačního pole nepředvyplní stávající hodnota.
Nakonec jsem to s pomocí kolegy vyřešil pomocí
DataGrid::addColumnCallback
. JS je na to naštěstí připravený a
očekává hodnotu k editaci v atributu
data-datagrid-editable-value
:
$grid->addColumnCallback('value', function ($column, $item) {
$column->getElementPrototype('td')->addAttributes(['data-datagrid-editable-value' => $item->value]);
});
- theo
- Člen | 55
Snažím se pomocí metody addGroupButtonAction
vytvořit
funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG
do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke
stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše
provede v AJAXovém volání, takže browser tento soubor nestáhne a
nenabídne k uložení.
Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?
- Domm
- Člen | 2
theo napsal(a):
Snažím se pomocí metody
addGroupButtonAction
vytvořit funkcionalitu, která by mi vyexportovala vybrané (zaškrtnuté) položky z DG do XLS souboru (HTML soubor s tabulkou) a vrátil mi tento soubor ke stažení.
Potíž je ale v tom, že když zmáčknu tlačítko Export, tak se vše provede v AJAXovém volání, takže browser tento soubor nestáhne a nenabídne k uložení.Existuje nějaký způsob jak donutit DG, aby nedělal obsluhu exportního volání AJAXem, ale normálním synchronním požadavkem? Dává to, jak se o to snažím vůbec smysl?
GroupActiony jsou k tomuhle moc neohrabané, jak by jsi jako uživatel
např. exportoval více stránek najednou?
Naštěstí v rámci datagridu existuje něco co tvůj požadavek řeší, viz.
https://contributte.org/…/export.html#…
Je to exportní callback s možností exportu zafiltrovaných dat nebo všech
dat, pak už je na tobě jakou formou to chceš předat uživateli.