REMOVER LINHA/REGISTRO NO DATAGRIDVIEW

ATSILVA 11/07/2014 17:38:59
#439478
Tenho um DataGridView do VB.NET onde o usuário digita as informações de cadastro do produto.
Na primeira coluna tenho um CheckBox.
Gostaria de incluir em um evento click de um botão que criei EXCLUIR LINHA para verificar no DataGridView as linhas selecionadas e exclui-las (remover) do DataGridView.
NILSONTRES 11/07/2014 18:01:14
#439479
VC QUER EXCLUIR TODAS SELECIONADAS DE UMA VEZ, OU A CADA LINHA CLICADA ?
ATSILVA 11/07/2014 18:04:12
#439480
Desejo excluir todas as linhas que estiverem selecionadas.
Consegui da forma abaixo. Não sei se esta correto. Mas esta excluindo as linhas selecionadas.

Private Sub cmdExcluiLinhaSel_Click(sender As Object, e As EventArgs) Handles cmdExcluiLinhaSel.Click
Dim i As Integer
With gridProduto
[ô]envia mensagem perguntando se o usuário deseja excluir as linhas selecionadas
If MsgBox([Ô]Deseja excluir as linha(s) selecionada(s)?[Ô], vbExclamation + vbYesNo, [Ô]Excluir[Ô]) = vbYes Then
For i = 0 To .Rows.Count - 1
For Each row As DataGridViewRow In .Rows
If row.Cells([Ô]clSel[Ô]).Value = True Then
.Rows.Remove(row)
End If
Next
Next
End If
End With
End Sub
JABA 11/07/2014 21:35:18
#439483
Resposta escolhida
Pra quê dois comandos [Ô]For[Ô]? Um apenas não resolve? Testa aí

Private Sub cmdExcluiLinhaSel_Click(sender As Object, e As EventArgs) Handles cmdExcluiLinhaSel.Click
Dim i As Integer
With gridProduto
[ô]envia mensagem perguntando se o usuário deseja excluir as linhas selecionadas
If MsgBox([Ô]Deseja excluir as linha(s) selecionada(s)?[Ô], vbExclamation + vbYesNo, [Ô]Excluir[Ô]) = vbYes Then

For Each row As DataGridViewRow In .Rows
If row.Cells([Ô]clSel[Ô]).Value = True Then
.Rows.Remove(row)
End If
Next

End If
End With
End Sub
ATSILVA 12/07/2014 12:45:20
#439487
Se o usuário selecionar apenas uma linha o comando acima com apenas um FOR...NEXT funciona.
Agora se selecionar 2 ou mais linhas exclui somente uma linha e as demais ficam.
Por isso inclui dois FOR...NEXT desta forma o usuário pode selecionar quantas linhas desejar e todas serão excluídas.
Uso VB 6. Estou iniciando no VB.NET. Existe um meio melhor de fazer isso?
JABA 12/07/2014 13:58:39
#439488
Desenvolvi uma forma melhor aqui pra você, veja:

Private Sub cmdExcluiLinhaSel_Click(sender As Object, e As EventArgs) Handles cmdExcluiLinhaSel.Click
[ô]envia mensagem perguntando se o usuário deseja excluir as linhas selecionadas
If MsgBox([Ô]Deseja excluir as linha(s) selecionada(s)?[Ô], vbExclamation + vbYesNo, [Ô]Excluir[Ô]) = vbYes Then
RemoverRowsSelecionadas(gridProduto)
End If
End Sub

Public Sub RemoverRowsSelecionadas(Grid As DataGridView)
For Each r As DataGridViewRow In Grid.SelectedRows
Grid.Rows.Remove(r)
Next
End Sub
ATSILVA 12/07/2014 17:29:13
#439491
JABA obrigado pelo código. Mas não funcionou.
Pelo que vi se não estou enganado o SelectedRows funciona somente para linhas selecionada inteira (quando fica azul a linha inteira) e não pelo CheckBox que inclui na primeira coluna.
OMAR2011 12/07/2014 21:50:03
#439494
Achei isto na net.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If MsgBox([Ô]Deseja excluir as linha(s) selecionada(s)?[Ô], vbExclamation + vbYesNo, [Ô]Excluir[Ô]) = vbYes Then
RemoveRowCheck()
End If
End Sub
Public Sub RemoveRowCheck()
Dim gvLista As New List(Of DataGridViewRow)
Dim arExclui As New ArrayList

For iInd As Integer = 0 To gdvDados.Rows.Count - 1 Step 1
If gdvDados.Rows.Item(iInd).Cells.Item(0).Value = True Then
arExclui.Add(iInd)
End If
Next
For iInd As Integer = arExclui.Count - 1 To 0 Step -1
gdvDados.Rows.RemoveAt(CInt(arExclui.Item(iInd).ToString))
Next
End Sub
Aqui no meu teste deu certo.
JABA 12/07/2014 23:20:15
#439496
Desenvolvi aqui exatamente como você precisa. Agora é só marcar a checkbox na primeira coluna como [Ô]true[Ô] que a row será excluída.
Testa aí e nos dá um retorno.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If MsgBox([Ô]Deseja excluir as linha(s) selecionada(s)?[Ô], vbExclamation + vbYesNo, [Ô]Excluir[Ô]) = vbYes Then
RemoverRowsSelecionadas(gridProduto)
End If
End Sub

Public Sub RemoverRowsSelecionadas(Grid As DataGridView)
Dim i As Integer = 0
Do While i < Grid.Rows.Count - 1
If (Grid.Rows(i).Cells(0).Value) Then
Grid.Rows.RemoveAt(i)
i = i - 1
End If
i = i + 1
Loop
End Sub
ATSILVA 13/07/2014 09:59:00
#439497
Bom dia! Obrigado a todos. JABA deu certinho muito obrigado.
Tópico encerrado , respostas não são mais permitidas