2010-12-21 24 views
6

Tengo una vista editable de datos editable sin límites. Estoy cambiando el valor de la nueva fila programáticamente.Hacer una nueva fila sucia mediante programación e insertar una nueva fila después en DataGridView

Normalmente, cuando el usuario escribe en cualquier campo de una nueva fila, se ensucia y se inserta otra fila debajo.

Pero en mi caso, cuando el usuario entra en cualquier campo de una nueva fila, estoy atrapando la tecla de función y cambiando el valor de la celda mediante programación.

myGrid.CurrentCell.Value = "xyz";

Y no inserta una nueva fila debajo de ella.

Ahora como solución probé esto en el controlador de eventos CellValueChanged.

if (myGrid.NewRowIndex == e.RowIndex) 
    { 
    myGrid.Rows.Insert(e.RowIndex + 1, 1); 
    } 

Pero lanza error diciendo No row can be inserted after the uncommitted new row..

¿Cómo podría decirle a myGrid que he hecho que la fila actual (que es una nueva fila) esté sucia y que haya una nueva fila después?

Respuesta

6

Aquí tiene la solución

myGrid.NotifyCurrentCellDirty(true); 
+0

He votado a favor de esto, pero con más pruebas descubrí que necesitaba TAMBIÉN NotifyCurrentCellDirty (False) como lo sugirió @Haider – isedwards

0

Creo (no estoy seguro, sin embargo), que está tratando de insertar una fila después de la Nueva Fila ... que no es posible. Cómo cambiar el código de este

myGrid.Rows.Insert(e.RowIndex - 1, 1); 

En caso de insertar la fila antes de la nueva fila, que debe trabajar.

+0

No necesito una fila encima de la fila actual. Estoy cambiando la nueva fila en sí y en su cambio necesito otra fila porque la fila actual está sucia después del cambio. Tengo la solución. Lo publicaré en breve. – IsmailS

0

Esto es realmente muy tarde teniendo en cuenta los plazos pregunta, pero la respuesta aceptada no funcionó para mí. Lo que terminó resolviéndome fue insertar una fila encima de la fila sucia, y luego editar esa fila 'limpia'.

if (e.RowIndex == myGrid.Rows.Count - 1) 
{ 
    myGrid.Rows.Add(); 
} 
myGrid[e.ColumnIndex, e.RowIndex].Value = etd.ResultText; // Edit at your leisure. 
+0

¿Se centró en la celda afectada antes de llamar a 'myGrid.NotifyCurrentCellDirty (true);'? – IsmailS

+0

Sí, el usuario tuvo que hacer doble clic en la celda antes de que el sistema la llenara. Funcionó bien la primera vez, pero el comportamiento en la inserción repetida no funcionaría. –

+0

Estoy en desarrollo web en este momento. Entonces no puedo verificar tu solución. :(Esperará a que alguien voten antes de que pueda marcar tu respuesta. – IsmailS

7

Estoy trabajando en winforms DataGridView. En mi caso he intentado @iSid solución, pero aquí es una ayuda en la que, he intentado este

myGrid.NotifyCurrentCellDirty(true); 
myGrid.NotifyCurrentCellDirty(false); 

haciendo solamente celda actual sucia en que no trabaja, tiene que confirmar que la célula también. En el siguiente comando estoy marcando que la celda actual no está sucia, esto hará que datagridview agregue una fila sucia. Está trabajando en mi proyecto.

Cuestiones relacionadas