Diskuze: dataGridView - pomalé načítání a řazení
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 12 zpráv z 12.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, asi by to chtělo zdroják, je to divné. Nemůže to ovlivňovat nějaký proces bokem ? Co se tam vše děje ? Nemůže to zpomalovat nějaký datagridviewcolumn vlastní výroby ? Co použít debugger a projít všechen vlastní zdroják, který se tam při DataSource = provádí ? (Pravá myš, step into) Není problém např. ve vykreslování ? Jak se to chová, když nad gridem přejedeš jiným oknem ? Stíhá to včas vykreslovat buňky ?
Při DataSource se nic dalšího neprovádí, stejně jako při Sort.
Používám programové obarvení řádků (bílá liché, šedá sudé) to se
ale provádí až po DataSource. Problém asi bude v množství dat. Při cca
100 řádcích je to v pohodě.
Bez kodu tezko rict, ale co tak delat select po mene radcich?
To mě napadlo.
Vyzrál jsem na to stránkováním datagridview po 100 řádcích.
Řažení a filtrování dělám na úrovni DataTable, kterou pak nastavuji jako
datasource pro datagridview.
No, pokud používáš stránkování, měl bys sortovat v db celou table, jinak se to asi bude chovat zvláštně. (Předpokládám, že načítáš jen část tabulky)...
Nehodil bys sem obsluhu eventu na ty liché a sudé řádky ? Nebude problém tam ? Volá se pro každou buňku/řádek, neděje se tam něco pomalého ? (Pokud si dobře pamatuji, windows.forms jsem již delší dobu nepoužíval)....
Do DataTable načtu data z DB a pak už pracuji jen z DataTable.
Řazení probíhá tak, že V eventu datagridview_Sorted provedu seřazení
DataTable, kterou potom nastavím jako DataSource pro datagridview.
Obarvování řádku dělám touto metodou:
public void ObarviRadky(DataGridView Seznam)
{
Seznam.DefaultCellStyle.ForeColor = Color.Black;
Seznam.DefaultCellStyle.SelectionBackColor = Color.FromArgb(0, 190, 243);
Color BarvaLichehoRadku = Seznam.DefaultCellStyle.BackColor;
Color BarvaSudehoRadku = Color.LightGray;
Color BarvaRadku = BarvaSudehoRadku;
Color BarvaPisma = VychoziBarvaPisma;
foreach (DataGridViewRow Radek in Seznam.Rows)
{
if (Radek.Visible == false)
continue;
if (BarvaRadku == BarvaSudehoRadku)
BarvaRadku = BarvaLichehoRadku;
else
BarvaRadku = BarvaSudehoRadku;
Radek.DefaultCellStyle.BackColor = BarvaRadku;
Radek.DefaultCellStyle.ForeColor = BarvaPisma;
}
Seznam.ClearSelection();
}
Provedení obarvení trvá při těch 1500 řádkcíh kolem 1 vteřiny.
Možná že při zobrazení všech 1500 obarvených řádků mu to déle trvá
kvůli grafickému vykreslování.
Jak už jsem ale psal, vyřešil jsem to stránkováním po 100 řádcích a pak
vše funguje normální rychlostí.
Aha, myslel jsem si, že používáš cell_formatting. Napadlo mě ještě, že každá změna barvy vyvolá nový repaint. (winapi zpráva, což může být to zpomalení)
Jinak si ještě myslím, že není potřeba porovnávat barvy, ale stačilo by % 2
Pokud ti ale vše funguje tak, že jsi s tím spokojený, asi není potřeba
dál řešit 
Nevic, jak u C, ale v javascriptu ve web prohlizeci 1000 radku neni problem. Serazeni, obarveni, vsechno pod 300ms. A protoze browser a js je postaveny nad C, tak by to melo byt vyrazne pomalejsi.
Na co jsem pri testech narazil, bylo ruzna doba pri ruznem zpusobu
sortovani.
Pri prvnim nacteni nacitam data bez filtru. blik, je to tak za 50ms + vykresleni
(rekneme 150ms). Ale pokud pouziji filtr, serad treba podle jmena, tak uz tam
nasakkuji prave takove casy jako 300ms. A zas hodne casu uberu, kdyz dam filtr
zobraz jen 100 radku. Nebo zobraz jen radky, kde ve sloupci slovo zacina treba
xyz.
Bohuzel nemuzu dat link. Leda bys mel nekde tva data (nebo jinak, kde je spoustu
radku a sloupcu), tak bych to s nima zprovoznil. A navic by ti to asi bylo na
nic, kdyz to potrebujes v C 
Jak už jsem psal obarvení trvá cca 1 vteřinu.
Problém je délka provedení řádku datagridview.DataSource = DataTable,
které poprvé trvá 3 vteřiny a po druhé 5 vteřin. žádný další kód
tento řádek nevyvolává.
Pomohlo stránkování, takže bych to považoval za vyřízené.
Díky všem za konzultaci.
Mam html/js demo, kdyby te to zajimalo. Kdyz si tam naimportujes vlastni csv
ulozene z excelu s mnoha radky.
https://mlich.zam.slu.cz/…as3-view.htm?…
Neni tam strankovani. Resp, je, ale nepouziva se pro tento kod. Take se tam
nepouziva slozeny filtr pres 3 soupce. Tam by prave byla krasne videt rozdilna
zatez.
Firefox, 1000 radku pro tu html stranku neni problem (a to je html, pres browser
a tak). Ackoliv porovnavani pracuje primo s textem. Mam i jinou verzi, kde si
vytvarim indexy.
K tvemu problemu, jeste mne ted napada, neslo by cely ten problemovy objekt vytvorit virtualne a pak jen priradit stejnou promennou? Pripadne vypnout zobrazovani. zpracovat, zapnout. Neco jako u vba wordu a excelu.
x = new datagrid
x.DataSource = ...
datagridview.DataSource = x.DataSource
---
datagridview.show = false;
datagridview.DataSource = ...
datagridview.show = true;
VYŘEŠENO!
Úplnou náhodou jsem přišel na to, že pomalé načítání a hlavně
řazení je způsobeno zapnutou vlastností DataGridView.AutoSizeRowsMode =
DataGridViewAutoSizeRowsMode.AllCellsExceptHeaders;
Zobrazeno 12 zpráv z 12.