Usuário com melhor resposta
Ocultar linha vazia na gridview

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
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
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
-
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
Nextmas 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
-
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
Nextmas 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
-
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
-
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 noRow.Cells(3).Text
e ai vai dar certo! teste como no primeiro código!
Fulvio C
-
-
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
-