|
[ vinkof @ 15.09.2009. 20:35 ] @
| Želim da klijent u formularu ne može izabrati datum manji od današnjeg.
Imam textBox sa CalendarExtenderom i CompareValidator koji provjerava datum u textBox-u sa trenutnim datumom. Vrijednost za usporedbu punim iz codebehind ovako:
CompareValidatorDolazak.ValueToCompare = Date.Now.Date .
Sve je u redu dok je Format CalendarExtendera MM/dd/yyyy jer Date.Now.Date vraća upravo taj format. Promjenim li taj format u CalendarExtenderu dolazi do nepravilne usporedbe datuma u text boxu i trenutnog (npr. ne prepoznaje datum 27.08.2009 kao manji od 08/30/2009).
Promjenom formata u codebehind vraćena vrijednost Date.Now.Date mijenja se u String i tada mi javlja grešku da ne može String pretvoriti u Date.
Promjenim li Tip podatka koji se provjerava, u CompareValidator-u u String, onda dobro uspoređuje samo datume istog mjeseca.
Možda je osnovni problem: kako promjeniti u format datuma u codebehind, za Date.Now.Date, a da tip i dalje ostane Date, a ne String?
Provao sam ovako:CType(Format(Date.Now.Date, "dd.MM.yyyy"), Date), ali mi javlja
"Conversion from string "30.08.2009" to type 'Date' is not valid."
|
[ markopadjen @ 15.09.2009. 20:42 ] @
Ako napišeš ovo na početku programa, sve operacije iz MAIN thread-a će imati regionalna podešavanja zadata komandom.
Znači, ako praviš nove tredove, dodaš ovo na početku svakog.
3098 - je srpski/ćirilica i nezavisno je od OS-a. Ako staviš npr Sr-Cyr, na nekim Windowsima neće prepoznati.
Link za druge vrednosti
Code: System.Threading.Thread.CurrentThread.CurrentCulture = New System.Globalization.CultureInfo(3098)
[ vinkof @ 15.09.2009. 22:04 ] @
Hvala majstore. sada sve radi.
Jedino što sam stavio "en-GB" a ne broj kao što si rekao, jer su u onoj tablici neki čudni brojevi. Recimo za srpski-ćirilica je 0x0C1A, a ne 3098 kao što si napisao. Gdje mogu naći te brojeve?
[ markopadjen @ 16.09.2009. 02:13 ] @
Nema na čemu.
Napisah već da ako staviš slovne oznake neće da radi na nekim sistemima. Konkretno, meni nije radilo na Visti.
0x0C1A je heksadecimalno za 3098
Npr, može u VB.NET-u da se napiše &C1A umesto 3098 i biće ok. A možeš i da otvoriš Windows Calculator (naučnu verziju) pa da konvertuješ heksadecimalne brojeve u decimalne, kao što sam ja uradio sa konkretnim primerom.
Takođe, ukoliko praviš aplikaciju za hrvatsko tržište, ukoliko navedeš 0x041A (1050) podesiće ti i zarez kao decimalni separator umesto tačke, staviće lokalna imena meseca, kao i KN za valutu... Što je, ako mene pitaš, i lepše i normalnije.
[ nikitaGradov @ 14.10.2009. 09:59 ] @
Evo kakav ja imam problem.
Prilikom upisa u bazu, imam i polja tipa DateTime.
U RegionalSettings, u RegionalOptions stoji Serbian(latin), a format datuma je dd.MM.yyyy.
Prilikom upisa u bazu javlja se greska: 'The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The conversion of a char data type to a datetime data type resulted in an out-of-range datetiem value.'
Greska se ne javlja ako se u RegionalSettings format datuma podesi da bude prvo mjesec pa dan. Stavio sam CultureInfo(0x081A) za Serbian-Latin podesenja.
Ima li neko ideju kako da ovo prevazidjem ? (ako upis realizujem preko uskladistene procedure, problem se ne javlja, ali je meni trenutno potrebno da upis realizujem iz koda).
Hvala
[ nikitaGradov @ 14.10.2009. 10:39 ] @
Citat: nikitaGradov: Evo kakav ja imam problem.
Prilikom upisa u bazu, imam i polja tipa DateTime.
U RegionalSettings, u RegionalOptions stoji Serbian(latin), a format datuma je dd.MM.yyyy.
Prilikom upisa u bazu javlja se greska: 'The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. The conversion of a char data type to a datetime data type resulted in an out-of-range datetiem value.'
Greska se ne javlja ako se u RegionalSettings format datuma podesi da bude prvo mjesec pa dan. Stavio sam CultureInfo(0x081A) za Serbian-Latin podesenja.
Ima li neko ideju kako da ovo prevazidjem ? (ako upis realizujem preko uskladistene procedure, problem se ne javlja, ali je meni trenutno potrebno da upis realizujem iz koda).
Hvala
Mozda nisam bio dovoljno jasan: ja zelim, zbog korisnika, da upisujem datum u formatu dd.MM.yyyy. Znaci, postoji INSERT xxxx, '14.10.2009',yyy i dobijam onu gresku, koju sam naveo. Ako sam dobro razumio SQL Server prihvata format datuma: MM/dd/yyyy?
Ako ovaj upis realizujem kroz uskladistenu proceduru, onda ovaj format dd.MM.yyyy glatko prolazi.
Dakle, kako da iz koda upisem format datuma dd.MM.yyyy u bazu?
[ nikitaGradov @ 14.10.2009. 11:09 ] @
Ja sam, izgleda, nasao rjesenje: treba koristiti GetDate() (u SQL Serveru ovo je isto kao i DateTime.Now u C#-u: http://forums.asp.net/t/1087086.aspx).
U svakom slucaju bi me interesovalo da li j eneko imao ovakvih problema i kako ih je rjesavao?
[ sallle @ 14.10.2009. 11:22 ] @
ako prilikom upisa koristis parametre, uopste ne moras razmisljas o formatu
Code:
datetime tvojDatum;
sqlcommand komanda = new sqlcommand();
komanda.commandText = "insert into tabela (datum_polje) values (@d)";
komanda.parameters.Add(new Sqlparamer("@d",Sqldbtype.datetime)).Value = tvojDatum;
komanda.executenonquery();
(kod je samo skica)
[ nikitaGradov @ 14.10.2009. 11:31 ] @
Citat: sallle: ako prilikom upisa koristis parametre, uopste ne moras razmisljas o formatu
Code:
datetime tvojDatum;
sqlcommand komanda = new sqlcommand();
komanda.commandText = "insert into tabela (datum_polje) values (@d)";
komanda.parameters.Add(new Sqlparamer("@d",Sqldbtype.datetime)).Value = tvojDatum;
komanda.executenonquery();
(kod je samo skica)
Hvala ti, slazem se ... zato i prolazi uskladistena procedura, jer se u njoj zadaju parametri ...
[ nikitaGradov @ 19.10.2009. 08:46 ] @
Mozda nekome bude od koristi, postoji i ovakvo rjesenje.
Ako zelimo upisati polje tipa DateTime, onda treba definisati: string vreme = DateTime.Now.ToString("yyyy-MM-dd"); i onda koristiti ovaj string gdje god treba upisati u bazu ovaj podatak o vremenu.
Pozdrav
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|