Mostruário de fotos com Asp.net e C#(csharp)

Nesse artigo mostrarei como fazer um visualizador de imagem utilizando Asp.net com C# e Javascript. Poderá ser utilizado como demonstrativo de imagens de notícias, de catálogo de fotos entre outros.

Nesse artigo mostrarei como fazer um mostruário de fotos utilizando asp.net com C# e javascript.

Em primeiro lugar, crie um banco de dados e adicione a tabela a seguir:

Create table Mostruario(
            ID int identity,
Titulo varchar(50),
Arquivo varchar(200),
Constraint pk_Mostruario primary key(ID)

Insira alguns registros no banco. Na coluna arquivo, insira um caminho de uma imagem de preferência coloque assim:
            /Imagem/Mostruario/Figura.jpg

Depois de criada, entre no VisualStudio 2005 e crie um novo WebSite.

No Default.aspx, arraste no Design da página um componente do tipo Repeater, que está na aba Data da Toolbox.Agora vá para o Source da página. Observe que o Repeater foi inserido desse jeito:


<asp:Repeater ID="rptCadernos" runat="server" OnItemDataBound="rptCadernos_ItemDataBound">

<ItemTemplate>
<div id="caderno" runat="server">
    <asp:Image ID="img" runat="server"
       ImageUrl=<%#Eval("arquivo") %> Width="100px" Height="100px" /><br />
    <asp:Label ID="lbltitulo" runat="server" Text=<%# Eval("titulo") %>></asp:Label>
    <br /><br />
    <asp:HyperLink id="hlkAnterior" runat="server">Anterior</asp:HyperLink>
    <asp:HyperLink id="hlkProximo" runat="server">Próximo</asp:HyperLink>
  </div>
</ItemTemplate>      
</asp:Repeater>

Repare que eu adicionei uma tag chamada ItemTemplate. Ela é responsável em preencher os itens no repeater. Adicionei também três componentes:
um componente do tipo imagem, na qual mostrará a imagem. Para mostrá-la, será preenchido pelo comando Eval o dado do caminho da imagem que está cadastrado no banco.Um componente do tipo label que virá do banco também por meio da coluna titulo e dois componentes do tipo hyperlink, na qual serão utilizados para a navegação das imagens.

Adicione também um componenate literal antes do Repeater e dê o nome de litScript. É nele que será inserido o código javascript que iremos criar dinamicamente.
Feito isso, pressione F7 para ir no code behind da página.Antes do PageLoad da página, declare duas variáveis do tipo string e instancie um DataSet:

string strScript = "";
string
link = "";
DataSet
ds = new DataSet();

Crie um método que carregará a tabela Mostruario, como a seguir:


public void CarregarRepeater()
{
    string
SQL = "Select * from Mostruario";
    //Adapte com sua conexão
    string
conexao = "Data Source=Uismar;Initial
          Catalog=ArtigoDevMedia;Persist Security Info=True;User
          ID=userImagem;Password=1010"
;

SqlConnection conn = new SqlConnection(conexao);
SqlDataAdapter da = new SqlDataAdapter(SQL,conn);   

da.Fill(ds);
rptCadernos.DataSource = ds.Tables[0];
   
rptCadernos.DataBind();

}

No PageLoad da página escreva o seguinte código:

protected void Page_Load(object sender, EventArgs e)
{
CarregarRepeater();
}

Volte para o Design da página e clique no componente repeater.Nos eventos dele, dê um duplo clique no evento ItemDataBound. No codebehind da página ele criou a seguinte linha de código:

protected void rptCadernos_ItemDataBound(object sender, RepeaterItemEventArgs e)
{

}

protected void rptCadernos_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
/* Cria um tipo HtmlGenericControl onde vai procurar a div
       
inserida no ItemTemplate do Repeater*/

HtmlGenericControl div=(HtmlGenericControl)e.Item.FindControl("caderno");

if (e.Item.ItemIndex > -1)
{
//Cria um tipo Hyperlink
           
HyperLink hlkProximo = (HyperLink)e.Item.FindControl("hlkProximo");
HyperLink hlkAnterior = (HyperLink)e.Item.FindControl("hlkAnterior");

/*cria duas string.Elas são responsáveis em capturar o ClientID(ID do
              controle)na qual soma mais um no caso de clicar no hyperlink
              proximo e subtrai menos um  no caso de clicar nohyperlink
              anterior*/

string LinkProximo = div.ClientID.Replace(e.Item.ItemIndex.ToString()
            + "_caderno", Convert.ToString(e.Item.ItemIndex + 1) + "_caderno");

string LinkAnterior =
            div.ClientID.Replace(e.Item.ItemIndex.ToString() + "_caderno",
            Convert.ToString(e.Item.ItemIndex - 1) + "_caderno");

//O NavigateUrl recebe a função javascript que está sendo criada

hlkProximo.NavigateUrl = "javascript:Fotos(" + LinkProximo + ")";
hlkAnterior.NavigateUrl = "javascript:Fotos(" + LinkAnterior + ")";

//Se o ItemIndex for zero significa que não há hyperlink anterior.

if (e.Item.ItemIndex == 0)
hlkAnterior.Visible = false;

// Se o ItemIndex for igual ao ultimo registro não há hyperlink
               proximo

if (e.Item.ItemIndex == ds.Tables[0].Rows.Count - 1)
hlkProximo.Visible = false;

// Na primeira vez ele começa a montar o script

if (strScript == string.Empty)
{
//Passa o link da primeira imagem

link = div.ClientID;
strScript = "<script type=text/javascript>";
strScript += "function Fotos(Div){" ;
}

Image img = (Image)e.Item.FindControl("img");

/*Passa o caminho da imagem.É preferível mapear no IIS

sua página, assim você passa a URL da imagem*/

img.ImageUrl = "http://localhost" + img.ImageUrl;

//Esconde o resto das imagens

strScript += "document.getElementById(" + div.ClientID +
                         ").style.display = none;";

}
}

Complemente o PageLoad com o seguinte código, após a chamada do método CarregarRepeater():

// Se a div não for nula, ele mostra a imagem

strScript += "if (Div != null){document.getElementById(Div).style.display = block;}}";

strScript += " window.onload=function() { Fotos(" + link+");}";

/* A literal recebe o script montado dinamicamente
e a tag que fecha o comando javascript*/

litScript.Text = strScript + "</script>";

Execute a aplicação. O resultado será parecido com a imagem abaixo.



Artigos relacionados