DataGridView - CellValueChanged

30/07/2007 - 10:38 por Nuno Santos | Informe spam
Hola grupo,

Primero que nada, quiero agradecer la ayuda que me tienen dado.

Ahora es lo siguiente: tenga la datagridview con el evento
CellValueChanged, en este evento tengo una validación, para ver si el
contenido de la cell es >0, caso no lo sea, ¿cómo puedo colocar la cell para
edición con el focus?

De todos modos pienso que este evento no sería el más correcto!?! Me pueden
indicar cuál el evento más correcto para lo que pretendo, que resumidamente
es validar el valor de la cell y dependiendo de su valor es continuar con la
inserción de líneas en la datagridview, o entonces seleccionar la cell que
está con el valor incorrecto después de dar una messagebox.

Un poquito de lo que estoy tentando hacer:

Esta datagridview tiene sólo 5 columnas, las 3 últimas son readonly, e las 2
primeras tienen que ser validadas. La 1º con su valor tengo que hacer una
busca en la BD, para poder llenar las 3 últimas columnas, y la 2º, su valor
tiene que ser >0 y < que el valor de la 3º columna.

Muchas gracias por vuestras ayudas,

Nuno Santos
 

Leer las respuestas

#1 Luis Miguel Blanco
30/07/2007 - 20:28 | Informe spam
Hola Nuno

El control DataGridView dispone de los eventos CellValidating y
RowValidating, que te permiten efectuar la validación a nivel de celda y/o
columna, dependiendo de lo restrictiva que necesite ser tu validación.

Dentro del manipulador de evento correspondiente, añade el código de
validación para la celda o fila, y en el caso de que dicha validación no se
cumpla, asigna el valor true al parámetro
DataGridViewCellValidatingEventArgs.Cancel que recibe el evento, como puedes
ver en los siguientes ejemplos de código que te acompaño.

//--
private void dataGridView1_CellValidating(object sender,
DataGridViewCellValidatingEventArgs e)
{
int nNumero;
DataGridViewColumn oDGVC = this.dataGridView1.Columns[e.ColumnIndex];
if (oDGVC.DataPropertyName == "PostalCode")
{
if (e.FormattedValue.ToString().Length > 0)
{
if (!int.TryParse(e.FormattedValue.ToString(), out nNumero))
{
MessageBox.Show("Sólo se permiten números");
e.Cancel = true;
}
}
}
}

private void dataGridView1_RowValidating(object sender,
DataGridViewCellCancelEventArgs e)
{
DataGridViewRow oDGVR = this.dataGridView1.Rows[e.RowIndex];
if (oDGVR.Cells["Region"].Value.ToString() != "EUR")
{
MessageBox.Show("El valor para el campo Region sólo puede ser EUR");
e.Cancel = true;
return;
}
if (!(oDGVR.Cells["Country"].Value.ToString() == "España" |
oDGVR.Cells["Country"].Value.ToString() == "UK"))
{
MessageBox.Show("Los valores para el campo Country son España o UK");
e.Cancel = true;
return;
}
}
//--

Espero que te sirva de ayuda.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Nuno Santos" wrote:

Hola grupo,

Primero que nada, quiero agradecer la ayuda que me tienen dado.

Ahora es lo siguiente: tenga la datagridview con el evento
CellValueChanged, en este evento tengo una validación, para ver si el
contenido de la cell es >0, caso no lo sea, ¿cómo puedo colocar la cell para
edición con el focus?

De todos modos pienso que este evento no sería el más correcto!?! Me pueden
indicar cuál el evento más correcto para lo que pretendo, que resumidamente
es validar el valor de la cell y dependiendo de su valor es continuar con la
inserción de líneas en la datagridview, o entonces seleccionar la cell que
está con el valor incorrecto después de dar una messagebox.

Un poquito de lo que estoy tentando hacer:

Esta datagridview tiene sólo 5 columnas, las 3 últimas son readonly, e las 2
primeras tienen que ser validadas. La 1º con su valor tengo que hacer una
busca en la BD, para poder llenar las 3 últimas columnas, y la 2º, su valor
tiene que ser >0 y < que el valor de la 3º columna.

Muchas gracias por vuestras ayudas,

Nuno Santos



Preguntas similares