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

Joca

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

Recommended Posts

Joca

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.

Share this post


Link to post
Share on other sites
Joca

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

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
Joca

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.

Share this post


Link to post
Share on other sites
jpaulino

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.