Como mostrar icone de pdf numa coluna de datagridview envez do byte[]

Filipe Nogueira Intertek 20 Pontos de reputação
2025-02-11T11:19:33.4366667+00:00

O datagridview da erro quando carrega as informações da table que contem uma coluna de byte[]

Visual Studio
Visual Studio
Uma família de conjuntos de ferramentas de desenvolvimento integradas da Microsoft para criar aplicativos para Windows, Web e dispositivos móveis.
46 perguntas
C#
C#
Uma linguagem de programação fortemente tipada e orientada a objetos com raízes na família C de linguagens e que inclui suporte para programação orientada a componentes.
27 perguntas
0 comentários Sem comentários
{count} votos

Resposta aceita
  1. Jonathan Pereira Castillo 14,625 Pontos de reputação Fornecedor da Microsoft
    2025-02-11T18:00:29.9633333+00:00

    Oi Filipe Nogueira Intertek!

    Bem-vindo ao Microsoft Q&A!

    Entendo que você está enfrentando dificuldades ao tentar exibir ícones de PDF em uma coluna de DataGridView em vez de byte[]. A resposta anterior já forneceu algumas boas abordagens, mas vou detalhar ainda mais e sugerir melhorias para garantir que você consiga exibir os ícones corretamente.

    Abordagem Melhorada para Exibir Ícones de PDF

    1. Converter byte[] em Imagem

    Se a coluna contém dados binários que representam ícones de PDF, você pode converter esses dados em imagens e exibi-los usando uma DataGridViewImageColumn. Aqui está um exemplo detalhado de como fazer isso:

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (dataGridView1.Columns[e.ColumnIndex].Name == "IconePDFColuna" && e.Value is byte[] byteArray)
        {
            using (var ms = new MemoryStream(byteArray))
            {
                e.Value = Image.FromStream(ms);
                e.FormattingApplied = true;
            }
        }
    }
    
    1. Adicionar uma Coluna de Imagem ao DataGridView

    Certifique-se de adicionar uma coluna de imagem ao seu DataGridView para exibir os ícones:

    DataGridViewImageColumn imageColumn = new DataGridViewImageColumn();
    imageColumn.Name = "IconePDFColuna";
    imageColumn.HeaderText = "Ícone PDF";
    dataGridView1.Columns.Add(imageColumn);
    
    1. Remover a Coluna byte[] do DataSource

    Se a coluna byte[] não precisa ser exibida, você pode removê-la do DataTable antes de associá-lo ao DataGridView:

    dataTable.Columns.Remove("NomeDaColunaByteArray");
    dataGridView1.DataSource = dataTable;
    
    1. Exibir uma Representação Textual do Conteúdo Binário

    Se for necessário exibir a informação como texto, você pode converter o byte[] para uma string Base64:

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (dataGridView1.Columns[e.ColumnIndex].Name == "ByteArrayColuna" && e.Value is byte[] byteArray)
        {
            e.Value = Convert.ToBase64String(byteArray);
            e.FormattingApplied = true;
        }
    }
    

    Recursos Adicionais

    Para mais detalhes e exemplos, você pode consultar os seguintes recursos:

    Espero que essas dicas ajudem a resolver o problema! Se precisar de mais assistência, estou à disposição.

    Saudações

    Jonathan.

    --__-__-------

    Sua opinião é muito importante para nós! Se esta resposta resolveu sua consulta, por favor clique em ‘YES‘. Isso nos ajuda a melhorar continuamente a qualidade e relevância de nossas soluções. Obrigado pela sua colaboração!

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

2 respostas adicionais

Classificar por: Mais útil
  1. Dio Xavier 2,840 Pontos de reputação
    2025-02-11T13:10:55.6466667+00:00

    Olá

    Bem vindo à Comunidade Microsoft

    Tudo bem, Filipe? O erro ocorre porque o DataGridView do Windows Forms não suporta diretamente a exibição de colunas do tipo byte[]. Esse tipo de dado é geralmente utilizado para armazenar informações binárias, como imagens ou arquivos, e não pode ser exibido como texto no grid.

    Para resolver essa questão, existem algumas abordagens possíveis:

    Converter o byte array em um formato legível:

    • Se a coluna contém imagens, utilize um DataGridViewImageColumn e converta o byte[] em um objeto Image. Isso pode ser feito sobrescrevendo o evento CellFormatting:
       private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (dataGridView1.Columns[e.ColumnIndex]. Nome == "ImagemColuna" && e.Valor é byte[] byteArray)
        {
            usando (var ms = new MemoryStream(byteArray))
            {
                e.Value = Image.FromStream(ms);
                e.FormattingApplied = true;
            }
        }
    }
       '''
       
       **Remover a coluna `byte[]` do DataSource antes de associá-lo ao `DataGridView`:** Caso a coluna não precise ser exibida, pode-se excluí-la antes de atribuir o `DataTable` ao `DataGridView`:
       
    

    dataTable.Columns.Remove("NomeDaColunaByteArray"); dataGridView1.DataSource = dataTable;

       
       **Exibir uma representação textual do conteúdo binário:** Se for necessário exibir a informação como texto, pode-se converter o `byte[]` para uma string Base64:
       
    

    private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { if (dataGridView1.Columns[e.ColumnIndex]. Nome == "ByteArrayColuna" && e.Value é byte[] byteArray) { e.Valor = Convert.ToBase64String(byteArray); e.FormattingApplied = true; } } '''

    A melhor abordagem depende do contexto e da finalidade da coluna byte[]. Se for uma imagem, o ideal é utilizar um DataGridViewImageColumn. Se for um dado binário irrelevante para exibição, removê-lo do DataSource pode ser a melhor opção. Se a informação precisa ser visível, converter para Base64 ou outro formato textual pode ser uma alternativa viável.

    1 pessoa achou esta resposta útil.
    0 comentários Sem comentários

  2. Filipe Nogueira Intertek 20 Pontos de reputação
    2025-02-13T08:48:53.4066667+00:00

    Obrigado a ambos pelas respostas. Foram uma grande ajuda.

    0 comentários Sem comentários

Sua resposta

As respostas podem ser marcadas como Respostas Aceitas pelo autor da pergunta, o que ajuda os usuários a saber a resposta que resolveu o problema do autor.