2008-11-04 32 views

Respuesta

7

No creo que haya ninguna forma de mover la fila "nueva fila" a la parte superior de la cuadrícula de datos.

Pero, ¿qué ocurre si deja la fila superior vacía y los datos rellenos mueven la fila hacia abajo según corresponda? En otras palabras, crea tu propia fila de "nueva fila", que es solo la primera fila en la grilla y agrega nuevas filas en blanco arriba cuando finaliza la edición.

Dim myrow = existingDataTable.NewRow 

    existingDataTable.Rows.Add(myrow) 

    adp.Fill(existingDataTable) 
    With DataGridView1 
     .DataSource =existingDataTable 
    End With  
+0

hmm que podría funcionar. No estoy seguro de cómo funcionaría con databinding, etc., pero tendré que experimentar un poco con eso. –

1

¿Puede asignar un valor temporal a la clave de la nueva fila que sea menor que todas las filas existentes? Luego, clasifique un DataView por esa clave y vincule la vista a su cuadrícula.

Mi equipo usa números negativos como identificadores de fila hasta que esa fila se haya insertado en la base de datos. No recuerdo que nuestras nuevas filas aparezcan en la parte superior, pero tampoco tenemos eso como un requisito.

1

Y si todo lo demás falla la manera hacky sería poner un DataGridView una línea separada por encima de la existente, clonar sus columnas, y el cable hasta el evento de presentación fila para añadir los datos a la inferior :)

4

Si no está utilizando controles enlazados, dgvItems.Rows.Insert() le permitirá especificar dónde se inserta la fila.

Si está utilizando un DataGridView enlazado, sin una especie activa, agrega la nueva fila a la fuente de datos en la ubicación deseada:

BoundTable.Rows.InsertAt (BoundTable.Rows.NewRow(), RowLocation) ;

He encontrado una relación interesante, si hay ediciones en la fila actual y la fila no se ha confirmado con la fuente de datos (es decir, acaba de comenzar a ingresar los datos), parece que es necesario mover la celda activa a otra fila para confirmar los cambios antes de insertar las filas.

+0

@Jeff Corder publicado accidentalmente antes de leer completamente su comentario, pero lo mantendré actualizado para cualquier persona confusa en su descripción. Sin embargo, esta es, en mi opinión, la forma más efectiva de hacerlo si no está buscando trabajar con identificadores de clave únicos. –

1

¿Está consumiendo el evento RowDataBound? De ser así, podría verificar si está vinculando la fila de encabezado de columna y luego agregar el código apropiado para insertar una fila justo debajo de esa.

De esta forma, cuando se enlazan las filas de contenido, no hay confusión con los índices de elementos, aunque recomendaría usar algunas DataKeys o algo por el estilo. Además, el uso del evento RowDatabound le permitiría tener una "fila de inserción" disponible cuando el usuario páginas a un bloque diferente de filas en el GridView.

-2

Supongo que quiere decir que cuando quiere agregar una nueva fila, ¿quiere que la fila se inserte realmente en la parte superior de la tabla en lugar de la parte inferior de la tabla como por defecto? Bueno, si esto es así, no tiene que lidiar con clasificación o valores clave; Basta con hacer como tal con el método Insert:

'crear una nueva fila

Dim tmpRow = Nueva DataGridViewRow

' Ajustar la fila de alguna manera

tmpRow.Altura = _cellRectSize

'Añadir la fila a DataGridView (es decir dgvEditor) en la parte superior (índice = 0)

Me.dgvEditor.Rows.Insert (0, tmpRow)

Works como un amuleto para mí, ¡espero que ayude a alguien más!

1

Como dijo While-E, use Insert en lugar de Add. De esta manera puede especificar dónde desea agregar el nuevo registro. Para agregar un nuevo registro en la parte superior de la cuadrícula, simplemente use Insert(0).

DataGridView1.Rows.Insert(0) esto va a añadir un nuevo registro en la parte superior, siempre

DataGridView1.Rows(0).Cells(n).Value = "abc" esto va a establecer el valor en la columna n

Cuestiones relacionadas