none
Como usar imagens no datagridview sem travar RRS feed

  • Discussão Geral

  • Olá

    Como colocar ícones em colunas do datagridview sem travar o form?  Na verdade, não se trata apenas de travar, mas sim na demora ao carregar os dados.

    Eu uso o código a baixo:

     Private Sub dgvPedidos_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) Handles dgvPedidos.RowsAdded
            For i As Integer = 0 To sender.Rows.Count - 1
                For ColNo As Integer = 1 To 10
                    If sender.Rows(i).Cells(3).Value = "Aberto" Then
                        sender.Rows(i).DefaultCellStyle.NullValue = Nothing
                        sender.Rows(i).Cells(ColNo).Style.ForeColor = Color.Red
                        sender.Rows(i).Cells(2).Value = ImageList1.Images(1)
                    Else
                        sender.Rows(i).Cells(ColNo).Style.ForeColor = Color.Black
                        sender.Rows(i).Cells(2).Value = ImageList1.Images(0)
                    End If
                    If sender.Rows(i).Cells(5).Value = "Aguardando" Then
                        sender.Rows(i).Cells(4).Value = ImageList1.Images(1)
                    Else
                        sender.Rows(i).Cells(4).Value = ImageList1.Images(0)
                    End If
                    If sender.Rows(i).Cells(7).Value = "Aguardando" Then
                        sender.Rows(i).Cells(6).Value = ImageList1.Images(1)
                    Else
                        sender.Rows(i).Cells(6).Value = ImageList1.Images(0)
                    End If
                Next
            Next
            Try
                sender.Columns(0).Visible = False
            Catch ex As Exception
            End Try
        End Sub

    Desde já agradeço.

    sexta-feira, 15 de dezembro de 2017 11:57

Todas as Respostas

  • Boa noite, Eliseu.

    1º - Verifique se o Option Strict está ativo, pois é necessário converter object em datagridview,

    2º - Sugiro, primeiramente, carregar o datagridview e depois fazer as verificações.

    Exemplo abaixo:

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(0))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(1))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(2))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aguardando", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(3))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aguardando", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(4))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aguardando", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(5))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(6))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", "Aberto", ImageList1.Images(7))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aberto", "Aberto", "Aguardando", "Aberto", "Aberto", ImageList1.Images(8))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aberto", "Aberto", "Aguardando", "Aberto", "Aberto", ImageList1.Images(9))
            dgvPedidos.Rows.Add(Nothing, Nothing, Nothing, "", "Aberto", "Aberto", "Aberto", "Aguardando", "Aberto", "Aberto", ImageList1.Images(10))
    
            verifica_dados_grid()
    
            
        End Sub
    
        Private Sub verifica_dados_grid()
    
            With dgvPedidos
    
                Try
    
    
                    For i As Integer = 0 To .Rows.Count - 2
                        For ColNo As Integer = 0 To 10
    
                            If .Rows(i).Cells(3).Value.ToString = "Aberto" Then
                                .Rows(i).DefaultCellStyle.NullValue = Nothing
                                .Rows(i).Cells(ColNo).Style.ForeColor = Color.Red
                                .Rows(i).Cells(2).Value = ImageList1.Images(1)
                            Else
                                .Rows(i).Cells(ColNo).Style.ForeColor = Color.Black
                                .Rows(i).Cells(2).Value = ImageList1.Images(0)
                            End If
                            If .Rows(i).Cells(5).Value.ToString = "Aguardando" Then
                                .Rows(i).Cells(4).Value = ImageList1.Images(1)
                            Else
                                .Rows(i).Cells(4).Value = ImageList1.Images(0)
                            End If
                            If .Rows(i).Cells(7).Value.ToString = "Aguardando" Then
                                .Rows(i).Cells(6).Value = ImageList1.Images(1)
                            Else
                                .Rows(i).Cells(6).Value = ImageList1.Images(0)
                            End If
                        Next
                    Next
    
                    .Columns(0).Visible = False
    
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            End With
        End Sub

    


    MARIANO1776

    sexta-feira, 15 de dezembro de 2017 23:18
  • Olá Mariano

    Obrigado pela assistência, no entanto sempre carrego o datagrid primeiro. 

    Nenhum erro é gerado para mim, funciona perfeitamente, com exceção na demora e travamento provisório do form quando aplicado. Isso que tenho poucos itens, imagina quando tiver diversos. 

    sábado, 16 de dezembro de 2017 15:28
  • Boa tarde, Eliseu.

    Se a Option Strict estiver desabilitada, poderão não ser mostrados erros referentes a incompatibilidade de objetos ou tamanho de dados em tempo de projeto, porém tais erros poderão ocorrer em tempo de execução. Daí minha sugestão para confirmar se está habilitada ou não.

    Você informou que carrega o grid primeiro, porém sugiro não utilizar o evento RowsAdded para fazer as verificações e alterações, mas utilizar uma rotina à parte.

    O código que enviei acima foi testado por mim e funcionou sem travar.

    Qualquer dúvida me retorne.


    MARIANO1776

    segunda-feira, 18 de dezembro de 2017 18:29
  • Olá Mariano

    Realmente Option Strict estava desabilitada, então habilitei. Quanto a não utilizar RowsAdded, excelente, segui sua dica e acelerou 90% o carregamento, sem travar.

    Muito obrigado! Mesmo, vlw ;)

    terça-feira, 19 de dezembro de 2017 19:12