web-dev-qa-db-fra.com

Comment ajouter des enregistrements à un DataGridView dans VB.Net?

Comment ajouter un nouvel enregistrement au contrôle DataGridView dans VB.Net?

Je n'utilise pas de liaison de jeu de données ou de base de données. J'ai un petit formulaire avec 3 champs et lorsque l'utilisateur clique sur OK, ils doivent être ajoutés au contrôle DataGridView en tant que nouvelle ligne.

13
John

Si vous souhaitez ajouter la ligne à la fin de la grille, utilisez la méthode Add () de la collection Rows ...

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

Si vous souhaitez insérer la ligne à une position particulière, utilisez la méthode Insert () de la collection Rows (comme GWLlosa l'a également dit) ...

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

Je sais que vous avez mentionné que vous ne faisiez pas de liaison de données, mais si vous avez défini un ensemble de données fortement typé avec une seule table de données dans votre projet, vous pouvez l'utiliser et obtenir des méthodes Nice fortement typées pour faire ce genre de choses plutôt que de compter sur les méthodes de la grille ...

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

Je pense que vous devriez construire un ensemble de données/datatable dans le code et lier la grille à cela.

4
Galwegian

Lorsque j'essaie de caster la source de données à partir de datagridview qui a utilisé bindingsource, l'erreur accor ne peut pas couler:

----------Solution------------

'J'ai changé le casting de bindingsource qui se lie avec datagridview

'Code ici

Dim dtdata As New DataTable()

dtdata = CType(bndsData.DataSource, DataTable)
2
Mr.Buntha Khin

La fonction que vous recherchez est "Insérer". Il prend comme paramètres l'index dans lequel vous souhaitez insérer et un tableau de valeurs à utiliser pour les nouvelles valeurs de ligne. L'utilisation typique peut inclure:

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

ou quelque chose à cet effet.

1
GWLlosa

Si votre DataGridView est lié à un DataSet, vous ne pouvez pas simplement ajouter une nouvelle ligne dans votre affichage DataGridView. Cela fonctionnera désormais correctement.

Au lieu de cela, vous devez ajouter la nouvelle ligne dans le DataSet avec ce code:

BindingSource[Name].AddNew()

Ce code ajoutera également automatiquement une nouvelle ligne dans votre affichage DataGridView.

0
Robert

Si vous souhaitez utiliser quelque chose de plus descriptif qu'un tableau stupide sans recourir à un DataSet, les éléments suivants peuvent s'avérer utiles. Il n'est toujours pas fortement typé, mais au moins il est vérifié par le compilateur et gérera très bien sa refactorisation.

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

Il convient de noter que l'utilisateur doit avoir l'autorisation AllowUserToAddRows sinon cela ne fonctionnera pas. C'est pourquoi je stocke la valeur existante, la définit sur true, fais mon travail, puis je la réinitialise comme elle était.

0
cjbarth