c# podmínka

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

c# podmínka

Příspěvek 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
c# Kozel zahradníkem
oneb1t
Začátečník
Začátečník
Uživatelský avatar
Registrován: 22. dub 2010

Re: c# podmínka

Příspěvek 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)
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# podmínka

Příspěvek 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.
c# Kozel zahradníkem
webwalker
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. úno 2010
Bydliště: Buranov vedle Prahy

Re: c# podmínka

Příspěvek 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.
Chtěl bych se stát profesionálním pískačem. Už teď jsem v tom sice hvězda, ale chtěl bych se ještě zdokonalit a začít se tím živit.
GPUreport.cz
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# podmínka

Příspěvek 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.
c# Kozel zahradníkem
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# podmínka

Příspěvek 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)
c# Kozel zahradníkem
webwalker
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. úno 2010
Bydliště: Buranov vedle Prahy

Re: c# podmínka

Příspěvek 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š.
Chtěl bych se stát profesionálním pískačem. Už teď jsem v tom sice hvězda, ale chtěl bych se ještě zdokonalit a začít se tím živit.
GPUreport.cz
Exp
Začátečník
Začátečník
Registrován: 24. črc 2004
Bydliště: Tábor
Kontaktovat uživatele:

Re: c# podmínka

Příspěvek 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?
webwalker
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. úno 2010
Bydliště: Buranov vedle Prahy

Re: c# podmínka

Příspěvek 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í.
Chtěl bych se stát profesionálním pískačem. Už teď jsem v tom sice hvězda, ale chtěl bych se ještě zdokonalit a začít se tím živit.
GPUreport.cz
lelekdk
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. črc 2009
Bydliště: Brno

Re: c# podmínka

Příspěvek 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.
c# Kozel zahradníkem
webwalker
Začátečník
Začátečník
Uživatelský avatar
Registrován: 03. úno 2010
Bydliště: Buranov vedle Prahy

Re: c# podmínka

Příspěvek 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.
Chtěl bych se stát profesionálním pískačem. Už teď jsem v tom sice hvězda, ale chtěl bych se ještě zdokonalit a začít se tím živit.
GPUreport.cz
Odpovědět

Zpět na „Programování a web“