Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 9 odgovora
  • 4.446 pregleda

Najnovija ↓

validacija datuma 15.09.2009. u 21:35 · pre 208 meseci #1
Ž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."

Potpis
Vinko
www.cro-adria.net
Re: validacija datuma 15.09.2009. u 21:42 · pre 208 meseci #2
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)

Re: validacija datuma 15.09.2009. u 23:04 · pre 208 meseci #3
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?
Potpis
Vinko
www.cro-adria.net
Re: validacija datuma 16.09.2009. u 03:13 · pre 208 meseci #4
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.
Re: validacija datuma 14.10.2009. u 10:59 · pre 207 meseci #5
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
Potpis
Programming is fun, but writing good software is hard ...
Re: validacija datuma 14.10.2009. u 11:39 · pre 207 meseci #6
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?
Potpis
Programming is fun, but writing good software is hard ...
Re: validacija datuma 14.10.2009. u 12:09 · pre 207 meseci #7
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?
Potpis
Programming is fun, but writing good software is hard ...
Re: validacija datuma 14.10.2009. u 12:22 · pre 207 meseci #8
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)
Re: validacija datuma 14.10.2009. u 12:31 · pre 207 meseci #9
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 ...
Potpis
Programming is fun, but writing good software is hard ...
Re: validacija datuma 19.10.2009. u 09:46 · pre 207 meseci #10
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
Potpis
Programming is fun, but writing good software is hard ...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme