• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Joca

[Resolvido] DataGridView e exibir imagens *.jpg na picturebox

6 mensagens neste tópico

Precisava de exibir numa PictureBox, a imagem referente a cada linha de uma DataGridView. Como não consegui fazê-lo com uma única DataGridView, alterei o projecto inicial e, agora tenho duas DataGridView e uma PictureBox.

A primeira DataGridView exibe o conteúdo de um ficheiro (por exemplo *.txt).

A segunda DataGridView contém apenas uma coluna do tipo DataGridViewComboBox.

A ideia é, após a abertura do ficheiro, o utilizador escolher na segunda DataGridView o título da coluna que contém os nomes das imagens.

Os problemas são os seguintes:

1 - como envio os cabeçalhos da DatagridView1 para a DataGridView2;

2 - depois de o utilizador ter seleccionado a coluna correcta na DataGridViewComboBox, como é que faço para que, o utilizador ao clicar numa linha da DataGridView1, exiba na PictureBox a imagem com o mesmo nome que existe nessa coluna mas, referente a essa linha clicada pelo utilizador?...

P.S.: As imagens estão localizadas na mesma pasta onde está o ficheiro *.txt que foi aberto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esqueci-me de referir como tinha pensado fazer inicialmente. Quem sabe...talvez alguém aí veja o que me escapou.

Tinha pensado em fazer o imports do System.IO.Directory e, a partir daqui obter a pasta que tinha aberto com o openfiledialog.

De seguida pensei em obter a pasta mesmo a partir da fonte:

nomePasta = OpenFileDialog1.InitialDirectory

...em que o nomePasta é uma string que iria usar para saber.... o nome da pasta...lol...

Depois, pensava eu... poderia fazer algo do género (no evento cellClick da datagridview):

Dim dr As DataGridViewRow = DataGridView1.CurrentRow

Dim nomeDasImagens As String

 

nomeDasImagens = dr.Cells(cabeçalhoDacoluna).Value.ToString()

picturebox1.imagelocation = nomePasta & \ & nomeDasImagens

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lá por estares com algumas dificuldades não compliques!

Só tens de ler o ficheiro para uma datatable e depois associares à datagridview.

Vê este pequeno exemplo que crie para te mostrar como fazer (tens de adaptar é claro):

        ' Cria uma nova datatable que irá guardar a informação
        Dim dt As New DataTable("fotos")
        dt.Columns.Add("ID", GetType(Integer)).AutoIncrement = True
        dt.Columns.Add("Nome", GetType(String))
        dt.Columns.Add("Imagem", GetType(Image))

        Dim row As DataRow = Nothing

        ' Ciclo em todas as imagens
        For Each file As String In IO.Directory.GetFiles("C:\Imagens", "*.jpg")

            ' Guarda só o nome do ficheiro
            Dim fileName As String = IO.Path.GetFileName(file)

            ' Cria uma nova Datarow (novo registo
            row = dt.NewRow
            row.Item("Nome") = fileName
            row.Item("Imagem") = Drawing.Image.FromFile(file)
            dt.Rows.Add(row)
        Next

        ' Mostra a informção na DataGridView
        Me.DataGridView1.DataSource = dt.DefaultView

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia era com um clique na célula, exibir na picturebox. Mas penso que assim também pode ser... Estou a aprofundar melhor essa possibilidade.

Mas, nesse caso, como faço para fazer o "autosize" das imagens nas células? Algumas imagens são mais pequenas e, outras são muito maiores. Não existe um tamanho padrão nas imagens.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de ver o tamanho da foto (usa o FileInfo) e depois defines o tamanho das linhas.

Se queres clicar e aparecer a imagem é ainda mais fácil. Guardas numa coluna escondida o caminho para a imagem e quando clicares num botão é só mostra-la.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora