2008-11-25 27 views
12

¿Cómo agrego un nuevo registro al control DataGridView en VB.Net?¿Cómo agrego registros a DataGridView en VB.Net?

No uso el conjunto de datos ni el enlace de la base de datos. Tengo un formulario pequeño con 3 campos y cuando el usuario hace clic en Aceptar, se deben agregar al control DataGridView como una nueva fila.

Respuesta

3

Creo que debe construir un conjunto de datos/tabla de datos en el código y vincular la grilla a eso.

0

La función que está buscando es 'Insertar'. Toma como parámetros el índice en el que desea insertar, y una matriz de valores para usar para los nuevos valores de fila. El uso típico puede incluir:

myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3}); 

o algo por el estilo.

26

Si desea agregar la fila hasta el final de la parrilla de utilizar el Añadir() método de la colección de filas ...

DataGridView1.Rows.Add(New String(){Value1, Value2, Value3}) 

Si desea insertar la fila en una posición partiular utilizar el Insert() método de la colección de filas (como GWLlosa también dijo) ...

DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3}) 

sé que usted ha mencionado no estaban haciendo de enlace de datos, pero si ha definido un conjunto de datos de tipado fuerte con una solo dato inflable en su proyecto, podría utilizar eso y conseguir algunos buenos métodos inflexible de tipos que se pueden hacer estas cosas en lugar de depender de los métodos de la rejilla ...

DataSet1.DataTable.AddRow(1, "John Doe", true) 
2

Cuando intenta convertir la fuente de datos de DataGridView que utiliza BindingSource se Accor error no puede fundición:

Solución ---------- ------------

'me cambió la fundición de BindingSource que se unen con el DataGridView

'Código aquí

Dim dtdata As New DataTable() 

dtdata = CType(bndsData.DataSource, DataTable) 
0

Si su DataGridView está vinculado a DataSet, no puede simplemente agregar una nueva fila en su pantalla DataGridView. Ahora funcionará correctamente.

su lugar debe añadir la nueva fila en la DataSet con este código:

BindingSource[Name].AddNew() 

Este código también se añade automáticamente una nueva fila en la pantalla DataGridView.

+0

¿Estás seguro de que es correcto? My BindingSource no tiene el método 'AddNew()'. – acme

0

Si desea utilizar algo que es más descriptivo que una matriz tonta sin recurrir al uso de un DataSet, lo siguiente puede resultar útil. Todavía no está fuertemente tipado, pero al menos es verificado por el compilador y será procesado bastante bien.

Dim previousAllowUserToAddRows = dgvHistoricalInfo.AllowUserToAddRows 
dgvHistoricalInfo.AllowUserToAddRows = True 

Dim newTimeRecord As DataGridViewRow = dgvHistoricalInfo.Rows(dgvHistoricalInfo.NewRowIndex).Clone 

With record 
    newTimeRecord.Cells(dgvcDate.Index).Value = .Date 
    newTimeRecord.Cells(dgvcHours.Index).Value = .Hours 
    newTimeRecord.Cells(dgvcRemarks.Index).Value = .Remarks 
End With 

dgvHistoricalInfo.Rows.Add(newTimeRecord) 

dgvHistoricalInfo.AllowUserToAddRows = previousAllowUserToAddRows 

Vale la pena señalar que el usuario debe tener el permiso AllowUserToAddRows o esto no funcionará. Es por eso que almaceno el valor existente, lo configuro en verdadero, hago mi trabajo y luego lo reinicio a cómo era.