[ Mikelly @ 21.12.2010. 20:36 ] @
Na internetu vele da validaciju treba raditi u partial klasama overridujuci OnImeSvojstvaChanging/Changed metode. To je moglo i u klasicnom ADO.NET-u partial-nim prosirivanjem datatable klasa. Kazu, kad zelis odbaciti promjenu, baci exception. Ni tada nisam kapirao, kao ni sad, sto ja da radim sa tim izuzetkom??? Da li da ga obradjujem upravo u toj metodi ili nedje drugo (da li ga je uopste moguce hvatati nedje drugo). Ono sto mi je jasno, ako tu bacim izuzetak, a ne obradim ga, puca mi program. Zbog toga sam i u ADO.NET-u validaciju vrsio prijavljujuci se na ColumnChanging/Changed dogadjaje datatable objekta, a ne prosirivajuci partialnim klasama. Kao prvo, ja kad bacim izuzetak, uopste mi se ne odbaci promjena: Code: partial void OnMaticni_BrojChanging(string value) { try { if (value.Length != 13) { throw new ArgumentException("Neispravan matični broj!"); } } catch (ArgumentException e) } } Dakle, ako sam unio maticni broj sa manje od 13 karaktera, i posle bacenog excpetion-a promjena vazi... Onda, probao sam da value promjenljivu podesim na ispravnu vrijednost, to mi je radilo u ADO.NET-u sa e.ProposedValue objektom, ali bez uspjeha: Code: partial void OnMaticni_BrojChanging(string value) { try { if (value.Length != 13) { throw new ArgumentException("Neispravan matični broj!"); } } catch (ArgumentException e) { value = this._Maticni_Broj; } } Cim izadjem iz oblasti vazenja ove metode, u pregenerisani kod, promjena koju sam upravo odradio, ne vazi. Value promjenljiva u sledecoj metodi/propertyju ima onu vrijednost koju sam joj dodijelio kroz UI. Code: public global::System.String Maticni_Broj { get { return _Maticni_Broj; } set { OnMaticni_BrojChanging(value); ReportPropertyChanging("Maticni_Broj"); _Maticni_Broj = StructuralObject.SetValidValue(value, false); ReportPropertyChanged("Maticni_Broj"); OnMaticni_BrojChanged(); } } Svaka sugestija, savjet ili pomoc da ukapiram kako ovo radi je dobrodosla... Pozdrav. |