none
Ocultar linha vazia na gridview RRS feed

  • Pergunta

  • Olá. Tenho um gridview que me apresenta linhas de histórico, entretanto há linhas que certa coluna vem vazia. Quando esta coluna vier vazia quero suprimir esta linha na gridview. Como faço? 

    Valerio Santos

    • Tipo Alterado Marcos SJ sexta-feira, 22 de janeiro de 2016 19:29 How to
    • Tipo Alterado valerioms quarta-feira, 3 de fevereiro de 2016 14:09
    sexta-feira, 22 de janeiro de 2016 19:21

Respostas

  • Poxa é tão simples de resolver quando vocês colocam o que fizerem kkkkkkkkkkkkkkkkkkkk !!!

    Valeioms faz um where a mais poxa!

    Não está assim:

    Sql = "SELECT * FROM vw_Historico WHERE Id_Dem = " & Demanda.Id_Dem & " ORDER BY Data_Hora_Hist DESC"

    Então elimine as linhas assim:

    Sql = "SELECT * FROM vw_Historico WHERE (Marcos_Status_Dem = "" OR Marcos_Status_Dem IS NULL) AND Id_Dem = " & Demanda.Id_Dem & " ORDER BY Data_Hora_Hist DESC"
    Você não vai trazer as linhas já direto no filtro e carregar somente o que precisa!


    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 16:52
    terça-feira, 26 de janeiro de 2016 14:33

Todas as Respostas

  • Para você ocultar a linha você deve informar alguma regra dentro de um for each

    Exemplo: A regra nesse caso é que se a coluna 0 (primeira coluna do gridview) contiver em seu text o valor "0" eu dou um visible = false, observe

    For Each Row As GridViewRow In GridView.Rows
    	If Row.Cells(0).Text = "0" Then
    		Row.Visible = False
    	End If
    Next

    Essa seria a maneira simples de fazer se o controle estiver carregado.

    Vamos dizer que isso venha de uma lista no banco de dados como por exemplo List, pode ser usando link para que antes de enviar para o DataSource seja filtrado, ou então, 

    Na minha visão a melhor você já poderia trazer da sua base (SQL) os dados que satisfaçam uma determinada condição, exemplo:

    SELECT * FROM TABELA WHERE CAMPO1 <> 0;

    Então tudo vai depender de como você desenvolveu sua tela, então existe varias respostas e seu questionamento dá esse leque de respostas!

    Se quiser seja bem objetivo fala realmente como carregas as informações que a gente colocar uma solução excelente e com desempenho melhor!


    Fulvio C

    sábado, 23 de janeiro de 2016 13:16
  • Olá Fulvio, 

    eu usei o código q vc descreveu acima:

    For Each Row As GridViewRow In dgvMarcosStatus.Rows
                If Row.Cells(4).Text = "0" Then
                    Row.Visible = False
                End If
    Next

    mas está com erro no GridViewRow. O erro diz 'Type GridViewRow is not defined'

    OBS.: Não sei se me fiz esclarecer no post onde informo a necessidade mas passo a descrevê-la novamente. Eu tenho uma linha inteira com vários campos preenchidos e várias gridviews alimentadas pela mesma tabela. Entretanto em cada gridview eu oculto os campos q não preciso. Há uma gridview em q a informação no campo visível não existe portanto nesta a linha não deve aparecer. 


    Valerio Santos

    segunda-feira, 25 de janeiro de 2016 19:13
  • Olá Fulvio, 

    eu usei o código q vc descreveu acima:

    For Each Row As GridViewRow In dgvMarcosStatus.Rows
                If Row.Cells(4).Text = "0" Then
                    Row.Visible = False
                End If
    Next

    mas está com erro no GridViewRow. O erro diz 'Type GridViewRow is not defined'

    OBS.: Não sei se me fiz esclarecer no post onde informo a necessidade mas passo a descrevê-la novamente. Eu tenho uma linha inteira com vários campos preenchidos e várias gridviews alimentadas pela mesma tabela. Entretanto em cada gridview eu oculto os campos q não preciso. Há uma gridview em q a informação no campo visível não existe portanto nesta a linha não deve aparecer. 


    Valerio Santos

    Poste o seu código?

    Poste a imagem do seu DataGridView?


    Fulvio C

    segunda-feira, 25 de janeiro de 2016 19:41
  • Esta é a view q alimenta as grids.

    E esta é a grid onde quero eliminar as linhas onde Status está em branco. 


    E este é o código que alimenta a grid. 

    Public Function CarregaListaHistorico(ByVal Conexao As ADODB.Connection, ByVal Demanda As Class_Demanda) As List(Of Class_Historico)
            Dim RST As New ADODB.Recordset
            Dim Historico As New Class_Historico
            Dim ListaHistorico As New List(Of Class_Historico)
            Dim Sql As String
            Sql = "SELECT * FROM vw_Historico WHERE Id_Dem = " & Demanda.Id_Dem & " ORDER BY Data_Hora_Hist DESC"
            RST = Banco.Conectar(Sql, Conexao)
            Do Until RST.EOF
                Historico = New Class_Historico
                With Historico
                    .NomeUsuario = IIf(IsDBNull(RST.Fields("Nome_Usu").Value), "", RST.Fields("Nome_Usu").Value)
                    .Data_Hora_Hist = IIf(IsDBNull(RST.Fields("Data_Hora_Hist").Value), "", RST.Fields("Data_Hora_Hist").Value)
                    .Marcos_Status_Dem = IIf(IsDBNull(RST.Fields("Marcos_Status_Dem").Value), "", RST.Fields("Marcos_Status_Dem").Value)
                    .Pendencias_Dem = IIf(IsDBNull(RST.Fields("Pendencias_Dem").Value), "", RST.Fields("Pendencias_Dem").Value)
                    .Proximos_Passos_Dem = IIf(IsDBNull(RST.Fields("Proximos_Passos_Dem").Value), "", RST.Fields("Proximos_Passos_Dem").Value)
                    .Riscos_Dem = IIf(IsDBNull(RST.Fields("Riscos_Dem").Value), "", RST.Fields("Riscos_Dem").Value)
                End With
                ListaHistorico.Add(Historico)
                RST.MoveNext()
            Loop
            Return ListaHistorico
        End Function


    • Editado valerioms segunda-feira, 25 de janeiro de 2016 20:01
    segunda-feira, 25 de janeiro de 2016 19:59
  • Esta é a view q alimenta as grids.

    E esta é a grid onde quero eliminar as linhas onde Status está em branco. 


    Valerio Santos

    Eu acredito que você colocou um Row inexistente, porque começa do 0 então até chegar no Status seria 3

    Código?

    For Each Row As GridViewRow In dgvMarcosStatus.Rows
        If Row.Cells(3).Text = "" Then
               Row.Visible = False
        End If
    Next
    Eu não sei se a comparação correta é "" você pode debugar para ver o valor que vem no 
    Row.Cells(3).Text
    e ai vai dar certo! teste como no primeiro código!


    Fulvio C

    segunda-feira, 25 de janeiro de 2016 20:03
  • Mas Fulvio nem consigo debugar porque o erro está na palavra GridViewRow. Diz "Type GridViewRow is not defined". Onde devo incluir o código q vc informou? Talvez eu esteja a incluí-lo no lugar errado. 

    Valerio Santos

    terça-feira, 26 de janeiro de 2016 13:28
  • Poxa é tão simples de resolver quando vocês colocam o que fizerem kkkkkkkkkkkkkkkkkkkk !!!

    Valeioms faz um where a mais poxa!

    Não está assim:

    Sql = "SELECT * FROM vw_Historico WHERE Id_Dem = " & Demanda.Id_Dem & " ORDER BY Data_Hora_Hist DESC"

    Então elimine as linhas assim:

    Sql = "SELECT * FROM vw_Historico WHERE (Marcos_Status_Dem = "" OR Marcos_Status_Dem IS NULL) AND Id_Dem = " & Demanda.Id_Dem & " ORDER BY Data_Hora_Hist DESC"
    Você não vai trazer as linhas já direto no filtro e carregar somente o que precisa!


    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 3 de fevereiro de 2016 16:52
    terça-feira, 26 de janeiro de 2016 14:33
  • Obrigado. 

    Valerio Santos

    terça-feira, 26 de janeiro de 2016 17:18