[ 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