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.
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)
Je pense que vous devriez construire un ensemble de données/datatable dans le code et lier la grille à cela.
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)
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.
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
.
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.