Diskuze: WPF tabulka

C# .NET .NET (C# a Visual Basic) WPF tabulka American English version English version

Avatar
Merry
Člen
Avatar
Merry:

Ahoj, prosim vás mate zkušenosti s vytvářením dynamické tabulky ve WPF? Přímo v kódu vytvářím tabulku ale ted bych potřeboval pomoct jak stylovat dané buňky, respektive ja potřebuju každou čtvrtou buňku dat border na levou stranu. aby z toho jakoby byla tabulka kde je málo buněk, ale ve skutečnosti by jich tma bylo hodně. ale aby šlo vidět jenom každá 4tá. Nevite jak tohle rešit v kódu? Díky :)

Odpovědět 23.1.2015 7:28
Jste dobří jen v tom, co vás baví.
Avatar
Merry
Člen
Avatar
Merry:

Jinak pro doplnění, používám komponentu Grid (možna by se na to hodila jiná) Ale potřebuju pak do buněk dávat ruzné veci jako button atd. Respektive to bude takovej kalenrář ukolů zamestnanců, který se bude tahat z databáze.

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět 23.1.2015 7:36
Jste dobří jen v tom, co vás baví.
Avatar
Odpovídá na Merry
sadlomaslox25:

zkus nakreslit co chces. nejak sem to nepochopil z textu.

 
Nahoru Odpovědět 23.1.2015 8:58
Avatar
rwn
Člen
Avatar
Odpovídá na Merry
rwn:

Hele, podle mě na to jdeš zbytečně složitě. Udělej si normální DataGrid a nastav mu, že každá buňka tabulky bude obsahovat vlastní Grid. Tohle samo o sobě ti nabízí ohromné možnosti, protože do tohoto Gridu v tabulce pak můžeš generovar úplně cokoliv.. například ty tlačítka a přitom ti zůstaně úplně stejný uživatelský přístup (co se manipulace s tabulkou týče). :)

Nahoru Odpovědět  +1 23.1.2015 9:18
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Honza
Člen
Avatar
Honza:

Ahoj, pokud bude těch věci na vykreslení víc a pro různé buňky budeš potřebovat úplně jiné styly, řešil bych to vlastním userControlem.
Pro každý styl si uděláš vlastní user control ve WPF (nebudeš muset všechno vytvářet dynamicky za běhu) a pak do dané buňky gridu jen plácneš userControl který se ti tam zrovan hodí :) Navíc do toho userControlu můžeš přenés část logiky (stisky tlačítek atd.) takže to pak nemusíš mít všechno v jednom souboru.

Editováno 23.1.2015 9:34
Nahoru Odpovědět 23.1.2015 9:33
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Merry
Člen
Avatar
Merry:

Abych to lépe popsal tak jsem to namaloval.
Tabulka se vytvaři z nejaké databaze kde taham čas a jak dlouho bude ukol trvat.
Ta se musí dělat dynamicky, v akždém políčku bude nahoře butonek (to jsou ty malé čtverečky černé) kde bude dalsi funkčnost (nějké přidavani ukolu atd...)Z databáze se bude urcovat barva podle tooh jaký je to ukol. Jde mi o to že ta jedna hodina je rodělená po 1řti minutach a chcu aby šla videt dycky jenom border té jedné hodiny. Proste tak jak to mám já. Dále aby samozřejme to bylo dynamické tedy když budou v kolizi nejaké ukoly tak se to dá na další řadek jak jsem demonstroval u pepu.

Nahoru Odpovědět 23.1.2015 10:23
Jste dobří jen v tom, co vás baví.
Avatar
rwn
Člen
Avatar
Odpovídá na Merry
rwn:

V tom případě děláš ale harmonogram a né tabulku jak jsi říkal. :) Hele a co takhle si tam hodit GridSplitery? Uživatel by měl pak možnost si jednotlivé buňky zvětšovat a zmenšovat podle libosti a přitom by ti to pěkně fungovalo na oddělení. :) Kdysi jsem dělal na jednom velkém projekty, šlo o řízení výroby pomocí Ganttových diagramů, což je ještě složitější než tvůj harmonogram. Tehdy jsem to řešil tak, že jsem si celou pracovní plochu vykresloval do Canvasu, to mě dovolilo vytvářet doslova cokoliv mě napadlo na ploše. Což by v tvém případě klidně mohlo být, že by sis vykreslil třeba Rectangly a nastavil jim událost na kliknutí - což by ti nahradilo tlačítka. :)

Nahoru Odpovědět 23.1.2015 12:28
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Merry
Člen
Avatar
Odpovídá na rwn
Merry:

Na jakej koliv obrázek co namaluju jde nastavit nejaká udalost?..Třeba mouseOver, Click, Double click, DragAndDrop,.­..atd..? Jeslti ano tak to tak možná udělám :)

Nahoru Odpovědět 23.1.2015 13:10
Jste dobří jen v tom, co vás baví.
Avatar
rwn
Člen
Avatar
Odpovídá na Merry
rwn:

Samozřejmě, že jde :) např:

Rectangle newRectangle = new Rectangle();
newRectangle.MouseLeftButtonDown += new MouseButtonEventHandler(newRectangle_MouseLeftButtonDown);

private void newRectangle_MouseLeftButtonDown(object sender, MouseEventArgs e)
{ }

Události si můžeš vytvářet na cokoliv tě napadne. Už jen tím, že napíšeš např zmíněný newRectangle. , tak ti našeptávaš ukazuje vše co je možné nastavit, včetně událostí. :)

Editováno 23.1.2015 13:46
Nahoru Odpovědět 23.1.2015 13:44
Co můžeš naprogramovat dnes, neodkládej na zítřek.
Avatar
Merry
Člen
Avatar
Odpovídá na rwn
Merry:

Jasně jasně děkuju, a jeste jednu otazku prosímte, Zkouším vytvařet ty rectangly ale nejde mi nijak nastavit border nalevo atd. Viš jakože bych napsal mujRect.Border(1,1,5,0); s tím že ten posledni by proste nebyl videt.
Děkuju :)

Nahoru Odpovědět 23.1.2015 14:04
Jste dobří jen v tom, co vás baví.
Avatar
rwn
Člen
Avatar
Odpovídá na Merry
rwn:

Normálně se dá rámeček pro Rectangle nastavit přes vlastnost .Stroke, ten má ovšem jen jednu nastavitelnou velikost tloušťky a vede kolem celého rectanglu. Pokud chceš vykreslit něco tak specifického, jako je nesymetrický rámeček, tak musíš vykreslit v podstatě dva objekty: Rectangle a Border zvlášť. Např:

Border newBorder = new Border();
newBorder.BorderThickness = new Thickness(1, 1, 5, 0);
newBorder.BorderBrush = Brushes.Black;
newBorder.Width = 200;
newBorder.Height = 40;

Rectangle newRectangle = new Rectangle();
newRectangle.Width = 200;
newRectangle.Height = 40;
newRectangle.Fill = Brushes.Red;
//newRectangle.Stroke = Brushes.Black;

mujCanvas.Children.Add(newRectangle);
mujCanvas.Children.Add(newBorder);

Samozřejmě na konci musíš prvně vykreslit rectangle a pak rámeček, protože ten ho překreslí. :)

Editováno 23.1.2015 14:35
Nahoru Odpovědět 23.1.2015 14:33
Co můžeš naprogramovat dnes, neodkládej na zítřek.
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 11 zpráv z 11.