Stránka 1 z 1

c# podmínka

Napsal: ned 6. črc 2014, 00:23
od lelekdk
Mám vytvořenou MySQL databázi, kde mám definované souřadnice bodu X a Y (double) a ke každému bodu je přiřazen rok (year).

Do aplikace jsem vložil CheckedListBox, do kterého vygeneruji rok (automaticky definovaný check). Pod tím konkrétním rokem je "n" bodů.

Do aplikace jsem pak vložil Chart, do kterého vynáším všechny body z databáze:

Kód: Vybrat vše

this.chart1.Series["Point"].Points.AddXY(myReader.GetDouble("x"), myReader.GetDouble("y"));
Teď bych rád vykreslení (selekci) bodů podmínil zaškrtnutím konkrétního roku v CheckedListBoxu. Automaticky po načtení databáze a vyplnění CheckedListBoxu mám všechny roky zaškrtnuté 2012, 2013, 2014..., a když některý odznačím, tak bych rád, aby se body v grafu přepsaly (vyselektovaly) pro konkrétní zbylé zaškrtnuté roky.

Potřeboval bych poradit jak takovou podmínku zapsat, ve které bude definováno, že pro vynesení bodu musí být zaškrtnut rok v CheckedListBoxu a zároveň musí odpovídat rok z databáze. Zápis bodu (který splní tuto podmínku) by se následně provedl stejným způsobem popsaným výše.
(Při každé změně v CheckedListBoxu se upraví množství vynesených bodů v Chart)

Děkuji za rady

--
edit: rok není INT, ale YEAR v DB

Re: c# podmínka

Napsal: ned 6. črc 2014, 16:45
od oneb1t
uprav si ten select do databaze tak aby ti to vracelo jen roky co chces

takze kdyz zaskrtnes 2014 tak za select se prida where year is in list(2014) etc....
kdyz zaskrtne 2014 a 2013 tak where year is in list(2014,2013)

Re: c# podmínka

Napsal: úte 8. črc 2014, 02:03
od lelekdk
podmínka vyřešena.

---
Zkouším si načítat čísla z DB do textBoxu:

do DB uložím číslo DOUBLE s desetinnou tečkou, a když si tuto hodnotu načtu do textBoxu, tak hodnota je s desetinnou čárkou.

Dá se v textBoxu nastavit, že před odesláním čísla z texboxu do DB se přepíše desetinná čárka na desetinnou tečku a následně se číslo odešle? Těch textboxů je více. Pokud tam zůstane desetinná tečka, tak číslo odeslat nejde.

Re: c# podmínka

Napsal: úte 8. črc 2014, 09:10
od webwalker
@lelekdk: Koukni, ono v NET se takto s databází nepracuje. K tomu je používán data binding, kde pomocí datasetů, dataTableAdapterů a bindingSource se hodnoty TextBoxů nastavují automaticky (můžeš využít také Entity Framework).

Pokud bys chtěl sám hodnoty do TextBoxů z DB načítat, pak zjišťovat, které TextBoxy byly změněny a následně ukládat zpět do databáze myslím, že by ses z toho za chvíli zbláznil (navíc ten kód by vypadal dost šíleně).

Takže doporučuji, zanech takovýchto snah, jdi na internet a naštuduj DataBinding.

Re: c# podmínka

Napsal: úte 8. črc 2014, 13:35
od lelekdk
DB MySQL tabulka má 3 sloupečky. ID, císlo1 (DOUBLE) a cislo2 (DOUBLE)

podle ID si načtu cislo1 do texbox1 a cislo2 do textbox2 a jen se tam zobrazí desetinná čárka. Po načtení jsem čísla přepsal a pak dal editovat do DB. Pokud tam byla tečka, tak se číslo v DB editovalo a pokud čárka, tak to jen upozornilo, že to nemůže vzít, že tomu nerozumí což je v pořádku.

Zkoušel jsem si napsat metodu, že najdu desetinnou čárku a nahradím jí desetinnou tečkou. Jednoduše před odesláním, pokud bylo třeba, tak jsem to přepsal (něco jako search (čárka) a replace (tečka), ale tohle mi šlo udělat jako metodu pouze pro jeden textbox1 a když jsem to samé udělal i pro ten druhý textbox2, tak už to nereagovalo ani na ten první.

určitě se podívám na DataBinding. To co jsem zatím zkusil, mi nepřišlo nijak zákeřné. Jen jsem před odesláním čísla přepsal čárku za tečku, pokud tam byla čárka. Jen mi to nefungovalo pro více než jeden textbox.

Re: c# podmínka

Napsal: úte 8. črc 2014, 16:25
od lelekdk
vyřešeno.

i když to asi není úplně korektní, tak jsem použil tohle:

Kód: Vybrat vše

textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("en-US"), "{0:0.000}", double.Parse(textBox1.Text));
Pro textBox1 a textBox2. Pro případ, že bych měl slabou chvilku a začal do textboxu práskat čárky při zápisu, tak na to stačilo použít

Kód: Vybrat vše

char zmena = e.KeyChar;
Ten DataBinding by byl asi lepší, možná správný, ale moc jsem k tomu nenašel. Takže jsem si vystačil s dostupným řešením. Proč použít těžký kalibr, když to jde s prstem v nose 8)

Re: c# podmínka

Napsal: úte 8. črc 2014, 19:44
od webwalker
No, když myslíš :)

Pokud netrváš na DBNULL hodnotách pro ty double v DB, pak místo TextBoxů použij raději NumericUpown kontroly a budeš mít kompletně vyřešenou i validaci.

PS: Budeš-li se dál zabývat C#, časem se nad řešením, které jsi dnes zvolil jistě pousměješ.

Re: c# podmínka

Napsal: úte 8. črc 2014, 20:02
od Exp
Trošku se s dovolením přiživím. WPF oproti WinForms nedovoluje jednoduše iterovat buňky DataGridu (DataGridView ve WF). Jakým způsobem by se dal udělat databinding dejmetomu docházkové tabulky, která by na každém řádku měla v prvním sloupci zaměstnance a v dalších sloupcích by byly jednotlivé dny v měsíci se zapsanou docházkou?

Re: c# podmínka

Napsal: úte 8. črc 2014, 20:54
od webwalker
@Exp: Já tedy nejsem zrovna specialista na WPF, ale z WP8 vím, že databinding je ve WPF ještě mnohem vymakanější než ve WinForm (je to klíčová vlastnost při používání modelu MVVM).

Tu docházku si budeš muset vyřešit sám :)
Já vidím prakticky dvě možnosti:

1. Natvrdo:
Každý Row v DB bude obsahovat Column1, Column2, .... Column31 s hodnotou docházky (v hodinách), Column s IdZaměstnance (nebo přímo jméno Zaměstnance) a Column s měsícem a rokem.
Pak by byl databinding opravdu jednoduchý.

2. Kouknout se na křížové tabulky (cross tables) a podle toho přizpůsobit návrh DB.

Ale určitě budou i další řešení.

Re: c# podmínka

Napsal: úte 8. črc 2014, 21:05
od lelekdk
webwalker : určitě děkuji za rady, postupně se doučím. Já v c# programuji spíše forfun a s MySQL databází jsem se seznámil poprvé v pátek/sobota 4-5.6.

NumericUpown jsem původně zamýšlel, nakonec jsem od něho upustil z důvodu malého prostoru na formuláři. (cvičně jsem ho použil, abych si to vyzkoušel, ale jinak jsem ho z formuláře smazal)

Určitě se budu dál zabývat c#, příjemné prostředí pro začátečníka, celkem slušná podpora ze strany nápověd, celkem se to dá pochopit a učit bez hlubší znalosti jiných jazyků (Pochopitelně na amatérské úrovni, na které jsem). V podstatě, kdo si chce jen vyzkoušet programovat, tak má celkem pěknou příležitost si to vyzkoušet.

Re: c# podmínka

Napsal: úte 8. črc 2014, 22:04
od webwalker
@lelekdk: Není zač, jen se tě snažím nasměrovat na správnou cestu, abys ses časem neutopil ve vlastním kódu. Představ si, že bys měl ve formuláři ne dva, ale třeba 40 textboxů :)
Programování je totiž zábavné, až když se zbavíš starostí o takovéto nudné věci a necháš je na nástroje NET (stejně je sám lépe nevyřešíš) a plně se tak můžeš soustředit na samotnou logiku věci.