Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema con DataGridView en C#

Estas en el tema de Problema con DataGridView en C# en el foro de .NET en Foros del Web. Hola que tal, bueno mi problema es el siguiente. Actualmente cuento con un DataGridView de escritura, en el cual al validar la información le voy ...
  #1 (permalink)  
Antiguo 22/01/2012, 20:11
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Problema con DataGridView en C#

Hola que tal, bueno mi problema es el siguiente. Actualmente cuento con un DataGridView de escritura, en el cual al validar la información le voy anexando renglones.

Mi problema es que si yo anexo 1 renglon y me regreso al renglon anterior, al momento de dar Enter la celda en la que se posiciona en en la nueva celda anexada en vez de la siguiente columna.

Esto solo me pasa con el Enter, con las teclas de desplazamiento no tengo problemas.

Ejemplo:

Tengo un Grid con 2 columnas y tengo el Renglon 0.

COLUMNA1 | COLUMNA 2
----------------------------------
Dato1 | Dato2
----------------------------------
Dato3 | Dato4
----------------------------------
|
----------------------------------

Si yo me regreso al Dato1 a modificarlo y doy enter, en vez de pasar a Dato2, pasa a Dato4 y no entiendo el por que

Estoy utilizando el Grid_CellEndEdit y dentro tomo el valor del e.RowIndex. Al validar la información si es correcta, lo posiciono en la columna 2 con el: Grid.CurrentCell. Esto solo me pasa cuando modifico un renglon anterior, puesto que en el renglon actual, si brinca correctamente a la siguiente columna.

Si alguien me pudiera decir, como hacerle para que al dar el Enter se posicion en la siguiente columna en vez del otro renglon le agradeceria mucho.

Por mientras seguire investigando.



Nota: Ya anexe el keypress y el keyDown pero no hace lo que quiero
  #2 (permalink)  
Antiguo 23/01/2012, 16:50
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Problema con DataGridView en C#

Hola que tal, bueno despues de mucho investigar por fin di con una posible solucion .

La primera es generar una clase en la cual se va a controlar el evento del ENTER cambiandolo por TAB.

Aqui se las dejo por si les puede servir:

Código C#:
Ver original
  1. public class UtileriaGrid : DataGridView
  2.     {
  3.         public bool bTeclaEnter = false;
  4.  
  5.         //Convertir [ ENTER ] en [ TAB ]
  6.         protected override bool ProcessDialogKey(Keys keyData)
  7.         {
  8.             if (keyData == Keys.Enter)
  9.             {
  10.                 SendKeys.Send("{TAB}");
  11.                 return true;
  12.             }
  13.             else
  14.             {
  15.                 return base.ProcessDialogKey(keyData);
  16.             }
  17.         }
  18.  
  19.         protected override void OnKeyDown(KeyEventArgs e)
  20.         {
  21.             if ((e.KeyData == Keys.Enter) && !bTeclaEnter)
  22.             {
  23.                 SendKeys.Send("{TAB}");
  24.             }
  25.             else
  26.             {
  27.                 base.OnKeyDown(e);
  28.             }
  29.         }
  30.     }

Esta clase funciona, siempre y cuando ya tengan renglones, pero si ocupan ir anexando con el ENTER no funcionaria por que se cambiaria por TAB

En mi caso no funciona por que ocupo ir anexando renglones .

Despues de mucho investigar en mi dialogo, encontre que se ejecuta 2 veces el metodo CellEnter, por eso es que me incrementa el RowIndex ( La primera vez se posiciona correctamente en el renglon, pero con la segunda vuelta incrementa el RowIndex), pero por mas que le e buscado no e podido hacer que se ejecute 1 sola vez o bien no me incremente el renglon . Asi que a seguir investigando haber como lo puedo solucionar


Etiquetas: datagridview
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:19.