Inquiridor
Como usar imagens no datagridview sem travar

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.
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
-
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.
-
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
-