ASP .NET - Exibindo imagens em um GridView armazenadas em uma pasta (C#)
Neste artigo eu vou mostrar como armazenar imagens existentes em uma pasta do disco local, o seu caminho e o seu nome, em uma tabela de um banco de dados SQL Server com a ajuda do controle FileUpload; veremos também como exibir essas imagens em um controle GridView em uma aplicação ASP .NET Web Forms.
Recursos usados neste artigo:
Criando o banco de dados e a tabela para armazenar os dados das imagens
Para criar o banco de dados eu vou usar o SQL Server Management Studio (SSMS) que por padrão é instalado quando você instala o SQL Server 2008 Express.
Abra o SSMS e faça o login;
1- No pesquisador de objetos, clique
com o botão direito do mouse no item Banco de dados e selecione
Novo Banco de dados;
2- Informe o nome do banco de dados,
no nosso exemplo iremos criar um banco de dados com o nome
Agenda, e clique no botão OK;
3- No pesquisador de objetos clique
com o botão direito do mouse no item Tabelas e a seguir em Nova
Tabela;
4- A seguir crie uma tabela com o
nome Imagens definindo seguintes campos:
Agora que temos o banco de dados e a tabela criados vamos definir no arquivo web.config a string de conexão para acessar o banco de dados;
Antes vamos criar o projeto.
Criando o web site no Visual Web Developer 2010(VWD)
Abra o VWD 2010 Express e no menu File clique em New Web Site;
A seguir selecione a linguagem Visual C# , o template ASP .NET Web Site, informe o nome Agenda e clique em OK;
Dessa forma teremos um web site com uma estrutura que iremos adaptar e ajustar para o nosso uso.
Na janela Solution Explorer remova do web site a pasta Account e o arquivo About.aspx;
Abra o arquivo da master page Site.master e altere o seu conteúdo excluindo o link para a página About.aspx e incluindo um link para a página Imagens.aspx que iremos criar;
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="SiteMaster" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head runat="server"> <title></title> <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> <asp:ContentPlaceHolder ID="HeadContent" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form runat="server"> <div class="page"> <div class="header"> <div class="title"> <h1> Macoratti .net </h1> </div> <div class="loginDisplay"> </div> <div class="clear hideSkiplink"> <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home"/> <asp:MenuItem NavigateUrl="~/Imagens.aspx" Text="Imagens"/> </Items> </asp:Menu> </div> </div> <div class="main"> <asp:ContentPlaceHolder ID="MainContent" runat="server"/> </div> <div class="clear"> </div> </div> <div class="footer"> </div> </form> </body> </html> |
No menu Web Site clique em Add New Item, selecione o template Web Form e informe o nome Imagens.aspx e clique no botão Add;
Selecione a página Imagens.aspx e alterne para o modo Source e declare os seguintes namespaces:
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Configuration;
Selecione o arquivo Imagens.aspx e alterne para o modo Design;
No menu Table clique em Insert Table
e defina uma tabela com 6 linhas e 1 coluna;
Na primeira linha digite o título
da página; No exemplo eu vou digitar Macoratti.net;
Na segunda linha defina uma cor para
separar o título;
Na terceira linha vamos incluir na
página Imagens.aspx um controle FileUpload a partir da
ToolBox
definindo o seu ID como fupImagem;
Ainda na terceira linha inclua um
controle Button com o texto - Enviar Imagem - e ID igual a - btnEnviarImagem;
Na quarta linha aplique a mesma cor
usada na segunda linha;
Na quinta linha inclua um controle
GridView com o ID=gdvImagens;
Na sexta linha inclua um controle
Label com ID=lblMsg que iremos usar para exibir mensagens ao
usuário;
Ao final o leiaute da página deverá estar assim:
Definindo a string de conexão e a pasta para salvar as imagens
Agora vamos definir no arquivo Web.Config a string de conexão incluindo o código abaixo na seção <configuration> para definir a string de conexão com o banco de dados Agenda.mdf:
<?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <connectionStrings> <add name="ConexaoSQLServer" connectionString="Data Source =.\SQLEXPRESS;Initial Catalog=Agenda;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> </connectionStrings> ......... ........ |
Vamos criar uma pasta na raiz do web site para salvar as imagens;
Clique com o botão direito sobre o nome do projeto e selecione New Folder e informe o nome Imagens.
Criando o código do projeto
Vamos agora definir o código para enviar as imagens , salvar as imagens na pasta Imagens e exibir as imagens em um controle GridView.
No evento Click do botão - Enviar Imagem - inclua o código abaixo:
protected void btnEnviarImagem_Click(object sender, EventArgs e) { if (fupImagem.PostedFile != null) { string nomeArquivo = Path.GetFileName(fupImagem.PostedFile.FileName); //Salva o arquivo no disco fupImagem.SaveAs(Server.MapPath("Imagens/" + nomeArquivo)); //obtem string de conexão do arquivo web.config String strConnString = ConfigurationManager.ConnectionStrings["ConexaoSQLServer"].ConnectionString; //cria uma nova conexão SqlConnection con = new SqlConnection(strConnString); //defina a instrução SQL para incluir os dados na tabela string strQuery = "insert into Imagens (descricao, caminhoNomeImagem)" + " values(@descricao, @caminho)"; //cria um comando SqlCommand cmd = new SqlCommand(strQuery); //define os parãmetros cmd.Parameters.AddWithValue("@descricao", nomeArquivo); cmd.Parameters.AddWithValue("@caminho", "Imagens/" + nomeArquivo); cmd.CommandType = CommandType.Text; cmd.Connection = con; try { //abre e executa o comando para salvar os dados na tabela con.Open(); cmd.ExecuteNonQuery(); lblMsg.Text = "Imagem incluída com sucesso..."; } catch (Exception ex) { lblMsg.Text = ex.Message; } finally { con.Close(); con.Dispose(); } } } |
Vamos agora ajustar na pátina Imagens.aspx controle GridView para exibir as informações da tabela Imagens definindo as colunas no GridView conforme abaixo:
<asp:GridView ID="gdvImagens" runat="server" Height="116px" Width="637px" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField = "id" HeaderText = "Código" /> <asp:BoundField DataField = "descricao" HeaderText = "Descrição" /> <asp:ImageField DataImageUrlField="caminhoNomeImagem" ControlStyle-Width="100" ControlStyle-Height = "100" HeaderText = "Visualizar Imagem"/> </Columns> </asp:GridView> |
No evento Load da página Imagens.aspx inclua o código a seguir para exibir as imagens no GridView:
protected void Page_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["ConexaoSQLServer"].ConnectionString; string strQuery = "select * from Imagens order by id"; SqlCommand cmd = new SqlCommand(strQuery); SqlConnection con = new SqlConnection(strConnString); SqlDataAdapter sda = new SqlDataAdapter(); cmd.CommandType = CommandType.Text; cmd.Connection = con; try { con.Open(); sda.SelectCommand = cmd; sda.Fill(dt); gdvImagens.DataSource = dt; gdvImagens.DataBind(); } catch (Exception ex) { lblMsg.Text = ex.Message; } finally { con.Close(); sda.Dispose(); con.Dispose(); } } |
Executando o web site e incluindo alguns arquivos teremos o seguinte resultado:
Pegue o projeto completo aqui: Agenda.zip
Veja os Destaques e
novidades do SUPER
CD VB 2012 (sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira... Quer aprender C# ?? Chegou o Super DVD C# 2012 com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.
|
Rom 13:11
E isso fazei, conhecendo o tempo, que já é hora de despertardes do sono; porque a nossa salvação está agora mais perto de nós do que quando nos tornamos crentes.Referências: