none
Remover linhas do Datagrid. RRS feed

  • Pergunta

  • Pessoal tenho um datagrid que adicionei uma coluna (Columncap), e coloco nela alguns valores manualemnte, as outras colunas do datagrid estao linkado com o banco. Eu queria usar o bindingsource pra filtar com essa coluna que eu criei. tentei fazendo como seria com as colunas normais mas da logo mensagem de campo não identificado, alguem sabe como posso fazer isso?


    • Editado RJCERRI quarta-feira, 2 de janeiro de 2013 14:55 assim fica melhor
    quarta-feira, 19 de dezembro de 2012 17:52

Respostas

  • Consegui assim
     Dim zero As String
            Dim valorcel As String
            zero = "0"
                   Dim i As Integer, j As Integer
            i = 0
            j = 0
            Do While i <= j
                valorcel = CStr(DGcaptacao.Item(2, i).Value)
                If valorcel = zero Then
                    DGcaptacao.Rows.RemoveAt(i)
                    j = DGcaptacao.Rows.Count - 1
                Else
                    i = i + 1
                End If
            Loop

    • Marcado como Resposta RJCERRI sexta-feira, 4 de janeiro de 2013 18:31
    sexta-feira, 4 de janeiro de 2013 18:31

Todas as Respostas

  • Pessoal to tentando outra coisa, to tentando apagar as linhas que a coluna ("Columncap") = 0, mas o exemplo que eu achei trata isso para as linhas selecionadas, como seria para meu caso?

    For Each r As DataGridViewRow In DGcaptacao.SelectedRows
    
                If DGcaptacao.CurrentRow.Cells("Columncap").ToString = "0" Then
                    DGcaptacao.Rows.Remove(r)
                    end if
     Next


    quinta-feira, 20 de dezembro de 2012 17:53
  • Tente assim mas ele não passa o valor da celula, alguem pode me ajudar?

    For icd2 = 0 To DGcaptacao.RowCount - 1

                'MsgBox(DGcaptacao.Item("Columncap", icd2).ToString)
                If DGcaptacao.CurrentRow.Cells("Columncap").ToString = "0" Then
                    DGcaptacao.Rows.Remove(DGcaptacao.CurrentRow)
                End If
            Next

    sexta-feira, 21 de dezembro de 2012 14:35
  • tente assim 

    For Each Col as DataGridViewRow in DGcaptacao.rows

    If Col.Cells(1).value = 0 then

    Col.Cells.remove(DGcaptacao.currentcell)

    end if 

    next

    acho q vai da ;)

    espero que ajude ^^


    AleSaggiorato

    sábado, 22 de dezembro de 2012 18:59
  • aa é , no lugar do numero "1" entre parenteses , tu coloca o numero da coluna que tu ta verificando 

    lembrando a primeira coluna do datagridview equivale a "0"

    ;)


    AleSaggiorato

    sábado, 22 de dezembro de 2012 19:00
  • Obrigado pela ajuda AleSaggiorato, mas ainda não consegui. Tentei assim, tive que tirar o sinal de = porque dava erro,ele pega o valor certo da coluna mas não consegue comparar com o "0" passa direto.

    For Each Col As DataGridViewRow In DGcaptacao.Rows
                If Col.Cells(2).Value Is "0" Then
                    Col.Cells.Remove(DGcaptacao.CurrentCell)
                End If
            Next

    Depis tentei assim e da o mesmo problema

    For Each Col As DataGridViewRow In DGcaptacao.Rows
                If Col.Cells(2).Value Is CInt(0).ToString Then
                    Col.Cells.Remove(DGcaptacao.CurrentCell)
                End If
            Next


    quarta-feira, 2 de janeiro de 2013 11:31
  • Tentei assim também e nada.
     Dim zero As String
            zero = "0"
            For Each Col As DataGridViewRow In DGcaptacao.Rows
                'DGcaptacao.CurrentRow.Cells("Columncap").ToString = "0"
                If Col.Cells(2).ToString = zero Then
                    Col.Cells.Remove(DGcaptacao.CurrentCell)
                End If
    
            Next

    quarta-feira, 2 de janeiro de 2013 15:00
  • Fiz assim agora, assim ele entra na condição mas da um erro na hora de remover a linha

    Collection already belongs to a DataGridView control. This operation is no longer valid.

     Dim zero As String
            Dim valorcel As String
            zero = "0"
            For Each Col As DataGridViewRow In DGcaptacao.Rows
                valorcel = CStr(Col.Cells(2).Value)            ' DGcaptacao.CurrentRow.Cells("Columncap").ToString
                'DGcaptacao.CurrentRow.Cells("Columncap").ToString = "0"
                If valorcel = zero Then 'Col.Cells(2).Value Is zero Then
                    Col.Cells.Remove(DGcaptacao.CurrentCell)
                End If
                valorcel = ""
            Next

    quarta-feira, 2 de janeiro de 2013 16:55
  • Tentei mas esses dois, mas assim nem entra. Pelo menos no outro teste entrou no if mas da o erro na hora de remover a linha
    For icd2 = 0 To DGcaptacao.RowCount - 1
                If DGcaptacao.CurrentRow.Cells(2).ToString = "0" Then
                    DGcaptacao.Rows.Remove(DGcaptacao.CurrentRow)
                End If
            Next
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            For Each r As DataGridViewRow In DGcaptacao.SelectedRows
                If DGcaptacao.CurrentRow.Cells(2).ToString = "0" Then
                    DGcaptacao.Rows.Remove(r)
                End If
            Next

    quarta-feira, 2 de janeiro de 2013 20:34
  • Caraca, como isso é complicado. Pensei que o erro era porque o datagrid estava vinculado a um dataset/bindingsource, ai tirei tudo e populei ele na mão, mas mesmo assim não consigo apagar as linhas que eu quero.
    quinta-feira, 3 de janeiro de 2013 13:37
  • Galera fiz assim e já melhorou um pouco

     Dim zero As String
            Dim valorcel As String
            zero = "0"
            For Each Col As DataGridViewRow In DGcaptacao.Rows
                valorcel = CStr(Col.Cells(2).Value)
                If valorcel = zero Then
                    DGcaptacao.Rows.Remove(Col)
                End If
                valorcel = ""
            Next
    Mas ele ta pulando, ele encontra um 0 e apaga mas o proximo ele não apaga, o que deve ser?

    quinta-feira, 3 de janeiro de 2013 14:37
  • Faça isto:

    Dim zero As String Dim valorcel As String zero = "0" For Each Col As DataGridViewRow In DGcaptacao.Rows valorcel = CStr(Col.Cells(2).Value) If valorcel = zero Then DGcaptacao.Rows.Remove(Col) End If Next

    quinta-feira, 3 de janeiro de 2013 15:58
  • Oi Vinicius, Logo depois que eu mandei a minha mensagem eu testei dessa forma e deu o mesmo problema.
    quinta-feira, 3 de janeiro de 2013 16:59
  • O estranho é que fazendo o debug ele não parece que pula, ele entra certo no if mas não apaga a linha. Cada vez piora a situação.
    quinta-feira, 3 de janeiro de 2013 18:07
  • Fiz esse teste

    Dim zero As String
            Dim valorcel As String
            Dim nome As String
            zero = "0"
            For Each Col As DataGridViewRow In DGcaptacao.Rows
                valorcel = CStr(Col.Cells(2).Value)
                nome = CStr(Col.Cells(1).Value)
                If valorcel = zero Then
                    MsgBox(nome)
                    DGcaptacao.Rows.Remove(Col)
                End If
            Next
            DGcaptacao.Refresh()
    Ta fazendo assim, ele entra no if e apaga a linha, quando vai fazer de novo ele pula a proxima linha e já me mostra o nome que ta na terceira linha. Alguem pode me ajudar?

    sexta-feira, 4 de janeiro de 2013 13:19
  • Consegui assim
     Dim zero As String
            Dim valorcel As String
            zero = "0"
                   Dim i As Integer, j As Integer
            i = 0
            j = 0
            Do While i <= j
                valorcel = CStr(DGcaptacao.Item(2, i).Value)
                If valorcel = zero Then
                    DGcaptacao.Rows.RemoveAt(i)
                    j = DGcaptacao.Rows.Count - 1
                Else
                    i = i + 1
                End If
            Loop

    • Marcado como Resposta RJCERRI sexta-feira, 4 de janeiro de 2013 18:31
    sexta-feira, 4 de janeiro de 2013 18:31