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[]

Tecnologias de desenvolvedor | Visual Studio | Outro
Tecnologias de desenvolvedor | Visual Studio | Outro

Uma família de pacotes integrados de ferramentas de desenvolvimento da Microsoft para criar aplicativos para Windows, web, dispositivos móveis e muitas outras plataformas. Tópicos diversos que não se encaixam em categorias específicas.

Tecnologias de desenvolvedor | C#
Tecnologias de desenvolvedor | 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.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta
JonathanPe 17,675 Pontos de reputação Moderador
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!

Esta resposta foi útil?

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

2 respostas adicionais

Classificar por: Mais útil
  1. Dio Xavier 296.7K Pontos de reputação Moderador Voluntário
    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.

    Esta resposta foi útil?

    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.

    Esta resposta foi útil?

    0 comentários Sem comentários

Sua resposta

As respostas podem ser marcadas como ‘Aceitas’ pelo autor da pergunta e ‘Recomendadas’ pelos moderadores, o que ajuda os usuários a saber a resposta que resolveu o problema do autor.