Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akci až 30 % zdarma při nákupu e-learningu - Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: C# winform - DataGridView a seřazení

Aktivity
Avatar
Michaal.K
Člen
Avatar
Michaal.K:2.4.2019 14:48

Ahoj,
mám na formuláři DataGridView ve kterém zobrazuji data z sql serveru. Připojení k sql serveru mi funguje. Tabulka na serveru má tyto sloupce: Id, Czech, English, Difficulty a CategoryId, ty také zobrazuji na formuláři. Ale potřeboval jsem do dataGridview přidat ještě jeden sloupec Tisk kde jsou checkboxy (viz. obr.).
Sloupec Tisk slouží k tomu aby si uživatel vybral a zaškrtal ty položky, které chce tisknout. S vybranými položkami budu pracovat dále...
Po spuštění programu zaškrtám položky, které chci k tisku a dám je znova setřídit (kliknu do hlavičky dataGridView), tak mi zmizí zaškrtnuté položky a musím je hledat a zaškrtávat znova.

Zkusil jsem: Napadlo mě si při zaškrtávání ukládat do nějakého listu vybrané položky a při události seřazení v dataGridView zaškrtat položky které mám uloženy v listu.

Chci docílit: Lze nějak udělat aby zůstala položka zaškrtnutá i po setřídění?
Díky

 
Odpovědět
2.4.2019 14:48
Avatar
JerryM
Člen
Avatar
JerryM:3.4.2019 12:18

bohužel ne, budeš si muset vytvořit v paměti obraz toho co je na DataGridVew a pak to zrekontruovat.

zkus se kouknout na https://www.devexpress.com/ tam maj lepší datagridview

 
Nahoru Odpovědět
3.4.2019 12:18
Avatar
František Pastorek:3.4.2019 12:57

Ak som správne pochopil, tak načítaš dáta z databázy do DataGridVew. Zaškrtneš čo chceš. Potom klikneš na zoradiť a riadky, v ktorých si checkbox zaškrtol sa zase odškrtnú. Je tak? Môj nápad by bol taký, nie som odborník, že dáta, ktorá načítaš z DB by som selectom namapoval na nový model, v ktorom by som mal jeden atribút navyše. Tebou spomínaný checkbox. Dáta by som nabindoval a triedenie robil už len na listom spomínaných dát. V tomto liste by sa ti samozrejme ukladal aj stav checkboxu.
Prípadne pridaj do modelu tabuľky atribút checkboxu a nemapuj ho na databázu. Teda ak používaš entity framework.

Editováno 3.4.2019 12:58
 
Nahoru Odpovědět
3.4.2019 12:57
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na František Pastorek
Michal Štěpánek:3.4.2019 14:11

Jako nápad je to dobrý, ale on to dělá ve winform, takže modely a binding asi nebudou něco, co by mohl použít...

Nahoru Odpovědět
3.4.2019 14:11
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Michal Štěpánek
František Pastorek:3.4.2019 14:21

Stále si však vie vyrobiť triedu, v ktorej bude mať premenné jednotlivých stĺpcov spolu s checkboxom. Stači to len namapovať z databázy. Pomocou lambda vytvorí pre každý objekt/riadok z DB nový objekt triedy a priradí hodnoty aké potrebuje. Či? Vo winforms bez bindov a entityframeworku som to ešte nerobil.

 
Nahoru Odpovědět
3.4.2019 14:21
Avatar
Michaal.K
Člen
Avatar
Odpovídá na František Pastorek
Michaal.K:3.4.2019 14:47

Program by měl fungovat takto: načítám data z sql databáze do dataGridView. Uživatel si zaškrtne třeba dvacet položek (řádek) a pak by měl stisknout tlačítko Tisk a vytisknou se zaškrtnuté řádky. Ale pokud uživatel omylem po zaškrtání položek a před stiskem tlačítka Tisk seřadí data v dataGridView podle jiného sloupce (prostě klikne do hlavičky dataGridView) položky již nejsou zaškrtané. Takže musí celý proces opakovat.
To mě taky napadlo udělat si nějakou třídu jako singleton a tam ukládat zaškrtané položky z dataGridView. Následně z této třídy brát data pro tisk.
Chtěl jsem vědět jestli neexistuje jiná cesta než mít uložená ty samá data na dvou místech. Protože kdybych nepoužíval singleton třídu, tak bych dataGridView prohledal foreach a hledal zaškrtané položky (řádky) a následně tisknul. Databáze má 18000 řádku a uživatel klidně může zaškrtnou všechny a vytisknout....
Snad jsem to trochu líp osvětlil...
Díky za rady.

 
Nahoru Odpovědět
3.4.2019 14:47
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.