[ gooxy @ 06.07.2008. 22:01 ] @
Moze li neko da mi razjasni zasto Save dugme na Navigator ToolStripu nece da radi svoj posao, koji je da update-uje tabelu baze, dok ne stavim this.Validate() funkciju?
[ Csharp @ 08.07.2008. 13:22 ] @
zar ne bi trebalo nakon EndEdit()?
[ gooxy @ 09.07.2008. 17:00 ] @
To sam nekako rešio tako da radi bez Validate().

No, javio se novi problem. NEREŠIV ! ! !
P O M O Ć ! ! !

Radim sa dataGridView komponentom i treba da obradim izmene podataka u koloni tj. da ih validiram. Kad u kodu koji obrađuje pritisak na dugme stavim:

Code:
float pom = float.Parse(Convert.ToString(dataGridView1[1, i].Value));


sve radi bez problema. Ali ako to isto stavim u kodu rukovaoca događajem CellValidating za tu tabelu baca FormatException. Izmenio sam kod tako da sam pokupio podatke o indeksu kolone i vrste ćelije iz argumenata događaja tj. iz EventArgs:

Code:
float pom = float.Parse(Convert.ToString(dataGridView1[e.ColumnIndex, e.RowIndex].Value));


Uopšte mi nije jasno kako da rešim problem. Mogao bi da lepo preskočim ovu validaciju prilikom izlaska iz ćelije i da to obavim ručno preko pritiska na dugme ali to nije rešenje.

Još da navedem da mi takođe u nastavku javlja "Input string is not in the correct format" kad pokušam da obradim vrednost ćelije koja treba da bude u okviru nekih granica, dok dok sam radio sa pritiskom na dugme sve je radilo dobro. Reč je o sledećem kodu koji treba da promeni boju ćelije u kojoj je vrednost van opsega. Nadam se da je jasno zbog čega bi elegantnije rešenje bilo preko validacije ćelije jer bi priliikom svakog napuštanja ćelije ona bila označena da je van opsega a ovako bi morao da radim za sve odjednom i da nateram korisnika da pritiska dugme, što je suvišno

Code:
                    if ((Convert.ToSingle(dataGridView1[e.ColumnIndex, e.RowIndex].Value) < Convert.ToSingle(dataGridView1[2, e.RowIndex].Value)) | (Convert.ToSingle(dataGridView1[e.ColumnIndex, e.RowIndex].Value) > Convert.ToSingle(dataGridView1[3, e.RowIndex].Value)))
                    {
                        dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.RosyBrown;
                    }


Samo da ponovim da ovaj kod radi bez problema kad ga smestim u kod funkcije koja obrađuje pritisnuto dugme (naravno da ovo e.RowIndex i sl. je zamenjeno odgovarajućim)

Možeš li mi pomoći?
Unapred HVALA!
[ Igor Gajic @ 10.07.2008. 06:33 ] @
CellValidating dogadjaj se ispaljuje za SVAKU celiju, tako da moras da
navedes za koju kolonu se izvrsava ta provera, tj. treba ti nesto tipa:

Code:

if(dataGridView1.Columns["Kolona za proveru"].Index==e.ColumnIndex)
{

//radi proveru

}
[ gooxy @ 10.07.2008. 13:46 ] @
Imam to u svom kodu, kao i validaciju da li je tip podataka odgovarajuci preko Parse funkcije. I uopste mi nije jasno zasto nece da funkcionise. A najzesce je sto kad to sve implementiram preko dugmeta sve lepo radi, samo sto nemam onu funkcionalnost koja mi treba. Stvarno ne znam u cemu je problem. Neki kazu da je zbog oznacavanja decimalnog broja tackom ili zarezom ali i tu sam probao sve kombinacije sa promenama regional settingsa. Ma, on nece da radi ni sa integer vrednostima. Ne kapiram
[ gooxy @ 11.07.2008. 14:00 ] @
Da potrazim pomoc opet, ako iko moze da pomogne. Problem je isti samo sto sam provalio da je greska "Input string not in correct format" zato sto mi je Regional Settings podesen na Serbian Latin a ja ukucavao vrednosti sa numerickog dela tastature koristeci decimalnu tacku a ne zarez. I tu ima jedna interesantna stvar, kad upisem vrednost sa tackom, onda datu vrednost konvertuje u float tako sto je pomnozi sa 10. No to mi nije trenutno od interesa.

Muku mi stvara CellValidating event i .Parse funkcija. Prilikom debagiranja skapirao sam da sve radi odlicno ali tek kad drugi put predjem preko celija sa unetim vrednostima. Npr. ja unesem vrednost 3 a opseg mi je od 10 do 20. Kada predjem iz tog polja javi mi Nepravilnost, iako je broj regularan. Izuzetak baca .Parse funkcija. E sad, ako se ja opet vratim u tu celiju izuzetak baci ona u koju nisam bio tj. prazna (sto je OK). Kad sad izadjem iz celije sa vrednoscu 3 .Parse ne baca izuzetak, if naredba utvrdi da je van vrednosti i promeni boju. I tako za sve.

Ima li idje, idje, idje,
Ikoga, ikoga, ikoga
da mi objasni zasto se ovo desava, i da mi resi problem.


Code:
try
            {
                if (e.ColumnIndex == 1)
                {
                    float pom = float.Parse(Convert.ToString(dataGridView1[e.ColumnIndex, e.RowIndex].Value));

                    if ((Convert.ToSingle(dataGridView1[e.ColumnIndex, e.RowIndex].Value) < Convert.ToSingle(dataGridView1[2, e.RowIndex].Value)) | (Convert.ToSingle(dataGridView1[e.ColumnIndex, e.RowIndex].Value) > Convert.ToSingle(dataGridView1[3, e.RowIndex].Value)))
                    {
                        dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = Color.RosyBrown;
                    }
                }
                
            }
            catch (FormatException fe)
            {
                MessageBox.Show("Greška u unosu podataka, u tipu vrednosti.", "N e p r a v i l n o s t", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }