2009-04-23 6 views
1

J'ai un DataGridView qui est lié à une collection d'objets.Supprimer la ligne sélectionnée d'un DataGridView

Je souhaite créer un bouton Supprimer sur un formulaire afin qu'un utilisateur puisse supprimer la ligne sélectionnée.

Mais il y a un problème si une nouvelle ligne (la dernière rangée spéciale de la grille) est sélectionnée. Si je sélectionne la nouvelle ligne, puis que j'essaie de cliquer sur le bouton Supprimer, la grille perd son focus et modifie la ligne sélectionnée! Il fait la dernière ligne sélectionnée (celle avant la nouvelle ligne). Donc, dans le gestionnaire de bouton Supprimer, une autre ligne est déjà sélectionnée, pas une nouvelle ligne!

Comment puis-je résoudre ce problème, autre que de masquer cette nouvelle ligne spéciale (AllowUserToAddRows = false) et de créer mon propre bouton "Ajouter" et de le coder?

Répondre

2

Vous pouvez désactiver le bouton Supprimer, lorsqu'une ligne invalide (la nouvelle ligne spéciale) est sélectionnée

0

Private Sub btnDelete_Click (expéditeur de ByVal comme System.Object, ByVal e comme System.EventArgs) Poignées btnDelete.Click

Dim gr As New DataGridViewRow 
    For Each gr In DataGridView1.SelectedRows 
     ds.Tables(0).Rows(gr.Index).Delete() 
    Next 
    ds.AcceptChanges() ' Accept Changes 
    DataGridView1.Rows.Clear() 
    lbltest.Text = "" 
    calldata(ds) ' this function is as follow 
    'Public Function calldata(ByRef DS As DataSet) 
    ' Dim i As Integer = 0 
    ' Dim dr As DataRow 
    ' Dim dc As DataColumn 
    ' For Each dr In DS.Tables(0).Rows 'dt.Rows 
    '  Dim j As Integer = 0 
    '  DataGridView1.Rows.Add() 
    '  For Each dc In DS.Tables(0).Columns 'dt.Columns 
    '   DataGridView1.Rows(i).Cells(j).Value = dr(dc).ToString() 
    '   lbltest.Text = lbltest.Text & " : " & dr(dc).ToString() 
    '   j = j + 1 
    '  Next 
    '  i = i + 1 
    ' Next 

    'End Function 
    ' the above code only update your dataset not actual data 
End Sub 
Questions connexes