none
Apanhar imagem de BD e mostrar num controle Image dentro de uma Data list RRS feed

  • Pergunta

  • Ola pessoal,

    estou tendo o seguinte problema:

    tenho uma DataList, onde irei apresentar dados apanhados da minha BD, onde apresento alguns campos como nome, apelido, data de nascimento, etc... estes dados mostrando os dados correctamente. mas o meu principal problema está num controle Image que eu coloquei para mostrar a imagem guardada na base de dados. Quero apanhar a imagem e mostra-la dentro da DataList junto com as outras informaçoes, formando tipo de uma carteira de identidade dos clientes, onde teremos a foto e as informaçoes ao lado...

    aleguem poderia me ajudar por favor??????? estou trabalhando num projecto para entregar nesse mes... preciso de ajuda,...

    quinta-feira, 15 de novembro de 2012 20:32

Respostas

  • Imagino que seja o seguinte.. A pasta das imagens está no mesmo local da sua página? Se não estiver, você tem que alterar a Url no banco ou no Image, do jeito que ficar melhor.

    Se estiver em pastas acima, por exemplo

    ImageUrl='<%# "../" + Eval("imagem") %>'

    Ou se estiver dentro de outras

    ImageUrl='<%# "nomedapasta/" + Eval("imagem") %>'

    E tem a opção "~/" que busca a pasta principal do projeto, e depois você segue com o caminho da pasta


    • Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 17:13
    • Não Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 18:41
    • Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 18:42
    quarta-feira, 21 de novembro de 2012 10:38

Todas as Respostas

  • Caros,

    estou com um pequeno probleminha no meu website onde estou querendo apanhar imagens de bd possivelmente listar num Datalist onde quero colocar a imagem e ao lado algumas informaçoes referidos a essa imagem.

    preciso de uma ajudinha porque ainda não sei muito bem manipular imagens em base de dados, tambem nao sei se o melhor será guardar a imagem diretamente na bd ou posso guardar apenas o nome da imagem na bd e a imagem em si fica guardado numa pasta..

    aguardo retorno e desde já obrigado.

    quarta-feira, 14 de novembro de 2012 19:06
  • Tenho uma página de cadastro de funcionario onde na pesquisa eu mostro a figura do funcionário, sendo que no banco eu tenho o caminho que está a foto, vou postar aqui para ver se te ajuda

    no aspx eu fiz isso logo no começo da div

    <span id="TXT_foto" style="z-index: 1; ; width: 50px; top: 250px; left: 830px; height: 40px" runat="server"></span>

    Eu estou usando entity framework para fazer o CRUD nos dados portanto para mostrar a foto fiz isso

    Tb_Grat_Operadores operadores = (from o in entity.Tb_Grat_Operadores where o.Nrsind  == codigo select o).FirstOrDefault();
    TXT_foto.InnerHtml = "<img src=../../Imagens/FotosFuncionarios/" + operadores.Nrsind + ".JPG width='85' height='113' border='1'>";


    Junior

    quarta-feira, 14 de novembro de 2012 19:48
  • Ola Junior,

    Obrigada, mas ainda estou com muitas duvidas..

    é que ainda não sei muito bem como manipular os dados das imagens na bd.. tambem nao entendi muito bem o codigo e nao faço uso do entity framework, entao se puderes explicar novamente ficaria agradecido.

    quarta-feira, 14 de novembro de 2012 20:54
  • Este site contém um exemplo bem interessante...

    http://www.aspsnippets.com/articles/display-images-from-sql-server-database-in-asp.net-gridview-control.aspx

    O autor usou uma página aspx como se fosse um asp.net handler e chamou este handler dentro da coluna do gridview... o handler vai retornar a imagem dentro da célula do gridView... pois quando o gridView é renderizado e transformado em xhtml e javascript no navegador, as células viram <DIV> e a imagem é transformada em um html element...

    Se a dica ajudar, por favor, marque como resposta...

      

    quinta-feira, 15 de novembro de 2012 23:59
  • Qual sua dúvida vc quer pegar os dados e mostrar a foto ou sua dúvida é na inserção dos dados ?


    Junior

    sexta-feira, 16 de novembro de 2012 13:05
  • Oi Flavio,

    Você poderia postar seu código pra gente?


    Thais Oliveira

    Analista Desenvolvedora

    sexta-feira, 16 de novembro de 2012 13:11
  • Ola Thais, blz?

    aqui está o meu código..

    <asp:DataList ID="DataList1" runat="server" CellPadding="3"
        RepeatColumns="2" RepeatDirection="Horizontal" DataKeyField="id_paciente" 
            DataSourceID="SqlDataSource1" BackColor="White" BorderColor="White" 
            BorderStyle="Ridge" BorderWidth="2px" CellSpacing="2" HorizontalAlign="Center" 
            Width="98%">
            <EditItemStyle BackColor="#F0F0F0" Font-Bold="False" Font-Italic="False" 
                Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
            <FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
            <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
            <ItemStyle BackColor="#F0F0F0" ForeColor="Black" Font-Bold="False" 
                Font-Italic="False" Font-Overline="False" Font-Strikeout="False" 
                Font-Underline="False" />
            <ItemTemplate>
                &nbsp;<table style="width: 98%; height: 134px">
                    <tr>
                        <td rowspan="5" style="width: 105px">
                            <asp:Image ID="Image1" runat="server" CssClass="imagemPaciente" />
                        </td>
                        <td style="width: 80px; padding-left: 5px;">
                            Nome:</td>
                        <td style="padding-left: 5px">
                            <a href='DetailsPaciente.aspx?id=<%# DataBinder.Eval(Container.DataItem, "id_paciente").ToString()%>'>
                            <asp:Label ID="nomeLabel" runat="server" Text='<%# Eval("nome") %>' />
                            </a>
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 80px; padding-left: 5px;">
                            Apelido:</td>
                        <td style="padding-left: 5px">
                            <asp:Label ID="apelidoLabel" runat="server" Text='<%# Eval("apelido") %>' />
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 80px; padding-left: 5px;">
                            Data Nasc:</td>
                        <td style="padding-left: 5px">
                            <asp:Label ID="data_nascimentoLabel" runat="server" 
                                Text='<%# Eval("data_nascimento") %>' />
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 80px; padding-left: 5px;">
                            Email:</td>
                        <td style="padding-left: 5px">
                            <asp:Label ID="emailLabel" runat="server" Text='<%# Eval("email") %>' />
                        </td>
                    </tr>
                    <tr>
                        <td style="width: 80px; padding-left: 5px;">
                            Data Registo:</td>
                        <td style="padding-left: 5px">
                            <asp:Label ID="data_cadastroLabel" runat="server" 
                                Text='<%# Eval("data_cadastro") %>' />
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
            <SelectedItemStyle BackColor="#9471DE" Font-Bold="True" ForeColor="White" />
        </asp:DataList>
        <br />


        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConexaoBDClinica %>" 
            SelectCommand="SELECT * FROM [paciente]">
        </asp:SqlDataSource>

    O que faz exatamente é pegar os dados da base de dados que tenho guardado e mostrar nos respectivos campos..

    só que tenho um controle image, que quero apresentar a foto guardada na bd nela.... não sei como manipular esses dados..


    pf, alguem consegue me ajudar?? ficarei grato 


    • Editado flaviodantas sexta-feira, 16 de novembro de 2012 16:39
    sexta-feira, 16 de novembro de 2012 16:37
  • nesse momento a minha duvida está em inserir os dados, mais precisamente a imagem.. estou em duvida qual seria o melhor, se guardar a imagem numa pasta ou diretamente na bd? tb criei um storedprocedure para adicionar os dados, inclusive a imagem, mas ainda estou com dificuldades no tratamento da imagem antes de envia-la para b, juntamente com os outros dados que sao precisamente textos.
    sexta-feira, 16 de novembro de 2012 16:43
  • Flavio vai depender da qtde de imagens que vc vai salvar, se forem muitas melhor guardar somente o caminho no banco e ir buscar na pasta.

    Junior

    sexta-feira, 16 de novembro de 2012 17:13
  • qual é sua duvida ? pq vc não usa ADO para acessar o banco eu particularmente acho melhor e seu código fica na dll e não no aspx.


    Junior

    sexta-feira, 16 de novembro de 2012 17:18
  • Junior, minha aplicaçao guardará imagens somente dos pacientes cadastrados. tb pode ou nao guardar uma imagem que é o raiox que o paciente efectua na consulta.. feito isto, qual é a melhor forma de guardar???

    e tb, ja tenho a minha sp preparada para enviara os dados para a bd, mas antes preciso fazer o tratamento da imagem, como é que faço? estou fazendo uso do FileUpload do Asp.net

    aguardo,

    sexta-feira, 16 de novembro de 2012 17:42
  • Flavio vai depender do tamanho das suas imagens e do seu servidor de BD pq isso ocupa espaço vc sobe para backup, isso tudo que ter que avaliado.

    Para fazer o ttratamento do arquivo acho que vc esta se referindo a ver se o arquivo que o usuário selecionou no fileupload é uma imagem limitar o tamanho se for isso vc faz no evento do botao tipo botão incluir e vc usa o fileinfo, faz tipo isso aqui

    //fazendo o upload do arquivo
                myFile1.PostedFile.SaveAs(myFile1.Value  + "arquivo.alp");
                
                FileInfo informacao = new FileInfo(myFile1.Value);
                if (informacao.Extension == ".txt")
                {
                    SF_CriaGrid();
                    lerarquivo(myFile1.Value);
                    
                }


    Junior

    • Marcado como Resposta flaviodantas sábado, 17 de novembro de 2012 12:00
    sexta-feira, 16 de novembro de 2012 18:02
  • Ola Junior, poderias dar uma vista de olhos no meu código tb? pf, me ajude... agradeço
    sexta-feira, 16 de novembro de 2012 19:07
  • Flavio esse seu select está trazendo todos os pacientes, em se tratando de uma aplicação web devemos evitar esse tipo de consulta, pq a página pode demorar a carregar, imagina hj se vc tem 5 pacientes, carrega rápido, agora qdo vc tiver 50.000 imagine a demora pra trazer todos, não sei como é sua aplicação, mais o ideal é vc trazer os dados somente com algum filtro ou filtros ou vc pode até trazer todos os pacientes, mais trazer dados simples, dados complexos como imagem seria ideal vc trazer caso seja clicado em algum paciente para se ver os dados específicos dele.

    Qual o erro que esta apresentando ?


    Junior

    sexta-feira, 16 de novembro de 2012 19:18
  • junior, valeu pela força, 

    mas se eu quizer especificar o que pretendo fazer como: quero apanhar foto com a fileupload e enviar para uma base de dados, que contem uma coluna do tipo image. pretendo fazer isto e depois enviar atraves de uma storedprocedure que tenho criado, onde tem um parametro @foto para enviar.

    qual o tratamento da imagem necessária antes de enviar para bd? preciso ver se o campo contem ficheiro, e caso verdadeiro, envio para bd, e tb gostaria de saber se tem como fazer no caso de nao seleccionarem nada para fazer upload, se poderia apanhar uma imagem padrao que tenho guardado numa pasta qualquer e enviar para a bd...

    será que é muita coisa?? agradeceria muito, e mais uma vez obrigado

    sexta-feira, 16 de novembro de 2012 19:24
  • flaviodantas como você esta salvando suas imagens no banco?

    normalmente eu salvo um caminho como referência para as imagens e não elas diretamente no banco

    sexta-feira, 16 de novembro de 2012 19:26
  • Flavio aparentemente o que vc quer não tem um custo auto em termos de performance, o sql faz insert bem rápido o custo maior é no caso de update, veja como vc quer fazer e tire suas dúvidas use ADO é melhor e mais rápido para fazer as operações (CRUD) no banco.

    Junior

    sexta-feira, 16 de novembro de 2012 19:44
  • ola Pablotdv,

    ainda não decidi exatamente como guardar as minhas imagens, mas como conselho do amigo Junior, eu vou ter que guardar as imagens numa pasta e levar somente o caminho na base de dados... essa é a ideia, mas só ainda não sei exatamente como fazer esse tratamento depois que fizer o upload.. uma ideia??

    sábado, 17 de novembro de 2012 00:18
  • Junior como podes ver no meu código na parte de imagem ainda não apanhei a imagem, só esta o controle image, sem passar nenhum valor... os textbox já trazem o valor da base de dados com o Eval, mas na imagem ainda não fiz nada pq ainda não sei exatamente o que passar... alguma ideia?? 

    acho que vou seguir de novo o seu concelho de fazer select mais especifico para esta página para não sobrecarregar os dados, visto que este código é para uma area de gerenciamento de clientes, onde posso ver todos os pacientes cadastrados na minha bd...

    mais uma vez valeu pelas dicas

    sábado, 17 de novembro de 2012 00:24
  • Flávio, eu faço como você, usando DataList e Image.

    Crio uma pasta chamada "imagens", onde coloco as imagens. No banco de dados eu gravo o caminho delas em varchar mesmo "imagens/imagem.jpg"

    Meu Image fica <asp:Image ID="img" BorderWidth="3" runat="server" ImageUrl=<%# Eval("imagem") %> />

    Se precisar, te passo um jeito fácil de salvar a imagem na pasta através de um FileUpload.

    sábado, 17 de novembro de 2012 01:30
  • Valeu carolina, isso mesmo que eu quero implementar, onde a imagem vai buscar na base de dados o caminho como descreveste.

    então poderias me ajudar no metodo de salvar a imagem na base de dados com a FileUpload? eu preciso saber os passos de pegar a imagem, prepara-la e depois posso coloca-lo no meu storedprocedure para enviar para a base de dados..

    Para o Junior e oPablotdv, valeu muito pela ajuda...nem sabem como estão me ajudando. agradeço muito mesmo.

    sábado, 17 de novembro de 2012 11:54
  • Eu trato o tamanho da imagem apenas na hora de exibir <asp:Image width="">, não faço outros tratamentos, porque até hoje não fiz nenhuma aplicação grande usando imagens, então é tranquilo. Costumo colocar um if limitando o tamanho do arquivo e só.

    para enviar ao banco eu pego de um FileUpload

    if (FileUpload1.HasFile)
    {

    string caminho = "imagens/" + FileUpload1.FileName;
    string path = Server.MapPath("~/ + caminho);
    File.WriteAllBytes(path, FileUpload1.FileBytes);

    MySqlCommand Salvar = new MySqlCommand("INSERT INTO tbl (imagem) VALUES ('" + caminho + "')", MinhaConexao);

    }

    O File.WriteAllBytes copia a imagem para a pasta de imagens. Dá pra usar também o FileUpload1.PostedFile.SaveAs(...);

    sábado, 17 de novembro de 2012 19:46
  • õla Carolina, estou com um pequeno probleminha ainda. estou fazendo uso de um storedProcedure para enviar a imagem para a base de dados, que é o seguinte

    CREATEPROCEDURE dbo.UpSP (@imagem varchar(100) )
    AS
    INSERT INTO imagemT( imag )
    VALUES
    (@imagem)

    isso é so para testar se funciona, onde tenho uma fileupload e um botao enviar.

    coloquei o codigo para fazer a conexao, criar o obj DataSet, criar e instanciar o obj SqlDataAdapter com a storedProcedure e a conexao, depois eu defino o tipo de comando que faço uso e a minha duvida esta na hora de apanhar os dados para colocar... eu fiz isso

    da.InsertCommand.Parameters.AddWithValue("@imagem", caminho);

    da.Fill(ds);

    isso foi feito depois do codigo de apanhar a imagem.. mas ta dando um erro... pf me ajuda

    sábado, 17 de novembro de 2012 22:51
  • Flávio, qual é o erro? O problema está sendo só com a imagem, os outros campos você passa da mesma forma, e funciona?

    Os possíveis problemas que consegui identicar é a variável não estar preenchida ou o tipo do campo no BD.

    Como sua variável caminho está preenchida? O campo imag no banco é um campo do tipo imagem, ou varchar?

    domingo, 18 de novembro de 2012 18:24
  • Ola Carolina, sobre enviar para base de dados ja resolvi adaptando ao código que disponibilizaste. está tudo funcionando e o caminho da imagem fica guardado na BD numa variavel varchar, e a imagem em si fica numa pasta.

    agora o meu problema está na hora em que eu preciso mostrar a imagem naquele DataList e não aparece. estou fazendo como vc me mostrou onde fica

    <asp:Image ID="Image1" runat="server" CssClass="imagemPaciente" 
                                ImageUrl='<%# Eval("imagem") %>' /> 

    mas preciso corrigir o meu css pq estou utilizando as Roles do ASP e entao na pasta onde tenho dado permissão não esta mostrando nenhuma imagem, mas quando corrigir poderei ver se está ou nao funcionando..

    mas valeu pela parte de inserir na base de dados,«. está funcionando. :D

    segunda-feira, 19 de novembro de 2012 12:31
  • Que bom que deu certo! :)

    Qualquer coisa avise aqui.

    terça-feira, 20 de novembro de 2012 10:27
  • Boas Carolina,

    tenho testado de todas as formas, mas ainda as imagens não aparecem no meu controle image que tenho na minha DataList... O que faço??

    me ajuda..

    terça-feira, 20 de novembro de 2012 23:39
  • Imagino que seja o seguinte.. A pasta das imagens está no mesmo local da sua página? Se não estiver, você tem que alterar a Url no banco ou no Image, do jeito que ficar melhor.

    Se estiver em pastas acima, por exemplo

    ImageUrl='<%# "../" + Eval("imagem") %>'

    Ou se estiver dentro de outras

    ImageUrl='<%# "nomedapasta/" + Eval("imagem") %>'

    E tem a opção "~/" que busca a pasta principal do projeto, e depois você segue com o caminho da pasta


    • Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 17:13
    • Não Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 18:41
    • Marcado como Resposta flaviodantas quarta-feira, 21 de novembro de 2012 18:42
    quarta-feira, 21 de novembro de 2012 10:38
  • Ola Carolina,

    era exatamente isso que estava faltando. como as minhas imagens estavao gravadas dentro de uma pasta, e o nome delas na base de dados, ao serem apanhados com o Eval, aparecia somente a referencia entao tive de inserir o "../" para funcionar certinho.

    nao sei se foi o correcto, mas troquei o controle de asp image, para um html Img, onde em vez de ImageUrl utilizei o src onde passei o codigo acima. ficou assim

    <img height="244px" width="200px" src="../<%# Eval("imagem") %>" />

    mas vou testar com o asp:image como referiste acima.

    Um obrigado a todos que me ajudaram e parabens por esse forum.

    qualquer dúvida estarei aqui ;)Muito Obrigado
    quarta-feira, 21 de novembro de 2012 21:46
  • só queria dizer que testei com o controle Image do asp e funcionou perfeitamente.. mais uma vez obrigada por tudo, voces todos.

    Grato, 

    Flávio.

    quarta-feira, 21 de novembro de 2012 21:47
  • Que bom que pude te ajudar também, e que tenha funcionado. :)


    sexta-feira, 23 de novembro de 2012 12:32