IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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: Kombinací jakých prvků udělat podobnou tabulku, WPF

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Dog
Člen
Avatar
Dog:8.8.2017 1:00

Ahoj,

chci se zeptat, jak nejefektivněji udělat takovou tabulku jak vidíte na obrázku, každé pole má X akcí, součet akcí musí dávat 1 neboli 100%, přičemž každé okénko má v sobě těch X akcí znázorněných v barvě, dále má každé pole další hodnotu výskytu a to <0;1>, když je pole celé šedé má hodnotu výskytu 0 a když je celé pokryté akcema tak má hodnotu 1. Např. AA má hodnotu výskytu kolem 0.55 a akce 0.7(raise 110, tmavě zelená);1.2(raise 32, světle zelená);98.1(call, žlutá);0(fold, červená)... Takových hodnot je tam 13x13...

Tak se ptám jak to udělat co nejefektivněji, abych se u toho moc nenadřel... Popř. jak byste to udělali vy... WPF a C# ovládám, stačí jen nějaký nástin, určitě ne celé řešení

Editováno 8.8.2017 1:00
 
Odpovědět
8.8.2017 1:00
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:8.8.2017 10:58

Ahoj, Na tabulku bych použil klasický Grid, který si vygeneruješ v codebehindu pomocí 2 forů (13 RowDefinitionů s Height="*" a 13 ColumnDefinitionů s Width="*"). Dále si vytvoříš to, co budeš v tabulce zobrazovat. Nejjednodušší přístup by podle mě bylo udělat si UserControl. Bude tam border a canvas, do kterého budeš pomocí rectanglů a textblocku vykreslovat to procentuální zastoupení a vypisovat jméno buňky. UserControl bude mít nějakou vlastnost, ze které si přečte, jak se má vykreslit. Dejme tomu nějakou třídu, např. CellItem, kde bude přesně zapsáno, jak se má co zobrazit. Tuto vlastnost pak budeš bindovat do usercontrolu, aby se korektně vykreslil, a tyto UserControly pak zobrazíš v tabulce. Asi by bylo nejlepší uchovávat je v nějaké kolekci, navrhuji ObservableCollec­tion<Observable­Collection<Ce­llItem>>.

Editováno 8.8.2017 10:59
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
8.8.2017 10:58
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na krepsy3
krepsy3:8.8.2017 11:15

Ještě se doplním s tím vykreslováním. Nejprve bys asi vykreslil ty čtyři rectangly (tm. zelený, zelený, žlutý, červený) se stejnou výškou (celá výška canvasu), ale různou šířkou podle procent. A pak bys přes ně vykreslil ten šedý, s celou šířkou canvasu a výškou podle výskytu (výška canvasu * (1 - hodnota výskytu)). Přes to celé textbox. A vykreslovací metoda by měla být zavolána pokaždé, když nastane na canvasu event size changed, aby vše souhlasilo, jak má. Nezapomeň mu dát stejnou minimální výšku a šířku.

Nahoru Odpovědět
8.8.2017 11:15
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na krepsy3
krepsy3:8.8.2017 11:17

Tedy, ve třídě CellItem bude 5 vlastností, typ asi double, které ponesou jednotlivá procentuální zastoupení.

Nahoru Odpovědět
8.8.2017 11:17
Programátor je stroj k převodu kávy na kód.
Avatar
Hubert Ličman:26.8.2017 21:55

Stáhni si komponenty Developer Express(www.devexpress.com). Tam je m.j. aspxGridView, což je geniální věc na všechny gridy. Dovede i uvnitř zobrazovat level meter, jak chceš. Ale umí toho daleko více. Je to kompletní suite, s níž jsem měl nárůst výkonnosti o 400%. To snad nepotřebuje komentář.

Nahoru Odpovědět
26.8.2017 21:55
Neznám slovo "nejde"
Avatar
Dog
Člen
Avatar
Dog:31.8.2017 17:01

Jojo nakonec jsem to udelal pomoci gridů v gridu v bunce gridu :D Ale mrknu :) Rectangly jsou taky řešení, problém nastává, že jsem je musel řadit do panelu a tím pádem se tabulka rozpadala když jsem ji zvětšil :)

Určo na to mrknu :-) Díky

Editováno 31.8.2017 17:03
 
Nahoru Odpovědět
31.8.2017 17:01
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.