U svojoj aplikaciji imam jednu dataGridView kontrolu koja nije povezana sa bazom nego je ja "rucno" punim. I sad zelim da validiram podatke u jednoj koloni tabele ali ne tako da se ne dozvoli napustanje celije dok se ne unese prava vrednost, vec da samo oznaci (promenom pozadinske boje) da je ta vrednost van nekog opsega.
Ja sam to odradio uz pomoc CellValidating eventa ali imam problem jer ne funkcionise kako bi trebalo. Naime, kad unosim vrednosti po prvi put, znaci krenem od prve vrste pa tako do zadnje na svaki izlazak iz celije mi "baca" izuzetak, bez obzira da li je to potrebno ili ne, a celije uopste ne farba. Kad krenem da se vracam, tj, kad drugi put ulazim i izlazim iz celije onda sve funkcionise ispravno: ako je vrednost van opsega menja boju, ako nije nista itd. U cemu je problem, greska, pa pri prvom izlasku iz celije uvek "baca" izuzetak. Evo koda:
private void dataGridView1_CellValidating(object sender, System.Windows.Forms.DataGridViewCellValidatingEventArgs e)
{
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.MistyRose;
else
dataGridView1[e.ColumnIndex, e.RowIndex].Style.BackColor = SystemColors.Window;
}
}
catch (FormatException fe)
{
MessageBox.Show("Грешка у уносу података, у типу вредности.", "Н е п р а в и л н о с т", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
Izuzetak se prvi put baca iz reda:
float pom = float.Parse(Convert.ToString(dataGridView1[e.ColumnIndex, e.RowIndex].Value));
koji sam stavio da bi imao proveru da li je vrednost tipa float. Cak iako izbacim taj red i pazim da unosim samo float vrednosti isto se desava samo iz if naredbe. Zasto prvi kad na iste vrednosti drugi put prosetam kolonom sve funkcionise. Kako da resim da na prvi izlazak iz celije isto dobro radi.
U P O M O C ! ! !
|