ASP .NET - Usando o DataList e destacando o item selecionado


 Neste artigo eu vou recordar como podemos usar o controle DataList da ASP .NET destacando um item selecionado usando o mouse.

A plataforma .NET oferece muitas vantagens no desenvolvimento de aplicações para internet : facilidade de uso , pouco código , recursos de IDE integrado do RAD - Rapid Application Development , componentes otimizados , e por ai vai...

Neste artigo eu vou recordar um pouco como usar o componente DataList , ele é um componente ideal para exibir um conjunto de dados a partir de uma fonte de informações , de um vetor , banco de dados , etc. Seu objetivo é claro: ser leve e usar pouco código.

O DataList define templates para exibição de dados. Nele podemos ter os seguinte templates :

  1. Header - primeiro template para cabeçalho
  2. Item - local onde iremos exibir os itens de informação
  3. AlternateItem - usado de forma intercalada com o template item
  4. EditItem - usado para editar as informações
  5. SelectedItem - usado para exibir os itens selecionados
  6. Separator - template entre os itens
  7. Footer - último template para rodapé

Podemos personalizar a exibição do componente através das seguintes propriedades:

  1. RepeatLayout  = " Flow | Table " - Podemos usar Flow ou Table , indicando se os itens serão exibidos em sequência ou em uma estrutura de tabela
  2. GridLines = "None | Horizontal | Vertical | Both " - Indica se iremos exibir linhas de grade no componente de acordo com as opções permitidas
  3. RepeatColumns= "NúmeroColunas" - Informa a quantidade de colunas que serão usadas para exibir os dados.
  4. RepeatDirection = " Vertical | Horizontal " - Indica a direção na qual os dados serão preenchidos.
  5. ShowHeader = " False | True " - indica se o template cabeçalho será exibido.
  6. ShowFooter = " False | True " - indica se o template rodapé será exibido.
  7. DataSource = "<% expressão databinding %> - Indica a fonte de dados
  8. OnCancelCommand = "OnCancelCommandMethod" - habilita o comando para cancelar a operação.
  9. OnDeletelCommand = "OnDeleteCommandMethod" - habilita o comando para deletar dados.
  10. OnEditCommand = "OnEditCommandMethod" - habilita o comando para editar dados.
  11. OnUpdateCommand = "OnUpdateCommandMethod" - habilita o comando para atualizar dados.

Neste artigo eu vou usar a tabela Employees do banco de dados Northwind.mdf do SQL Server para exibir a foto e os detalhes dos funcionários mostrando como destacar um funcionário selecionado no datalist. Para isso eu vou aplicar um estilo definido no arquivo style.css na pasta css do projeto.

Abaixo vemos a estrutura da tabela Employees :

Vamos trabalhar apenas com as seguintes informações da tabela:

Campo  Tipo
FirstName varchar(100)
City varchar(100)
Country varchar(50)
PhotoPath varchar(100)

Recursos usados:

Criando o projeto no Visual Studio 2013 Express for web

Abra o VS Express 2013 for web e clique em New Web Site;

A seguir selecione a linguagem Visual C# e o template ASP .NET Web Application;

Informe o nome DataList-Images e clique no botão OK;

No menu PROJECT clique em Add New Item e a seguir selecione o template Web Form.

Altere o nome para Default.aspx e clique no botão Add:

Vamos incluir um controle DataList com ID=dtlImagens nesta página a partir da ToolBox e definir um ItemTemplate que realiza a vinculação com os campos FirstName, City e Country da tabela Employees:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <link href="css/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DataList ID="DtlImagens" runat="server" Font-Names="Verdana" Font-Size="Small"
            RepeatColumns="3" RepeatDirection="Horizontal" Width="600px">
            <ItemStyle ForeColor="Black"/>
            <ItemTemplate>
                <div id="pricePlans">
                    <ul id="plans">
                        <li class="plan">
                            <ul class="planContainer">
                                <li class="title">
                                    <h2>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label></h2>
                                </li>
                                <li class="title">
                                    <asp:Image ID="imgFoto" runat="server" Width="100px" Height="100px" ImageUrl='<%# Bind("PhotoPath","~/fotos/{0}") %>' />
                                </li>
                                <li>
                                    <ul class="options">
                                        <li><span>
                                            <asp:Label ID="lblNome" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label></span></li>
                                        <li><span>
                                            <asp:Label ID="lblCidade" runat="server" Text=' <%# Bind("City") %>'></asp:Label></span></li>
                                        <li><span>
                                            <asp:Label ID="lblPais" runat="server" Text='<%# Bind("Country") %>'></asp:Label></span></li>
                                    </ul>
                                </li>
                                <li class="button"><a href="#">Detalhes</a></li>
                            </ul>
                        </li>
                    </ul>
                </div>
            </ItemTemplate>
        </asp:DataList>
    </div>
    <div style="background-color: Gray; width: 600px; text-align: center; font-weight: bold;
        font-family: Verdana; font-size: 12px">
        by macoratti .net</div>
        <asp:Label ID="lblerro" runat="server" Text="Label"></asp:Label>
    </form>
</body>
</html>

Abaixo vemos o ItemTemplate onde definimos alguns controles Labels e um controle Image usado para exibir a imagem:

A seguir o arquivo Default.aspx exibindo o controle Repeater com o DataList vinculado:

Vamos criar uma nova pasta em nosso projeto chamada css e definir o arquivo de estilo style.css com o código abaixo:

html,html a {
	-webkit-font-smoothing: antialiased;
	text-shadow: 1px 1px 1px rgba(0,0,0,0.004);
}
body {
	font-family: 'Open Sans', sans-serif;
	background: #e2e2e2;
}
#plans,#plans ul,#plans ul li {
	margin: 0;
	padding: 0;
	list-style: none;
}
#pricePlans:after {
	content: '';
	display: table;
	clear: both;
}
#pricePlans {
	zoom: 1;
}
#pricePlans {
	max-width: 69em;
	margin: 0 auto;
}
#pricePlans #plans .plan {
	background: #fff;
	float: left;
	width: 100%;
	text-align: center;
	border-radius: 5px;
	margin: 0 0 20px 0;
	-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1);
	box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.planContainer .title h2 {
	font-size: 2.125em;
	font-weight: 300;
	color: #3e4f6a;
	margin: 0;
	padding: .6em 0;
}
.planContainer .title h2.bestPlanTitle {
	background: #3e4f6a;
	background: -webkit-linear-gradient(top, #475975, #364761);
	background: -moz-linear-gradient(top, #475975, #364761);
	background: -o-linear-gradient(top, #475975, #364761);
	background: -ms-linear-gradient(top, #475975, #364761);
	background: linear-gradient(top, #475975, #364761);
	color: #fff;
	border-radius: 5px 5px 0 0;
}
.planContainer .price p {
	background: #3e4f6a;
	background: -webkit-linear-gradient(top, #475975, #364761);
	background: -moz-linear-gradient(top, #475975, #364761);
	background: -o-linear-gradient(top, #475975, #364761);
	background: -ms-linear-gradient(top, #475975, #364761);
	background: linear-gradient(top, #475975, #364761);
	color: #fff;
	font-size: 1.2em;
	font-weight: 700;
	height: 2.6em;
	line-height: 2.6em;
	margin: 0 0 1em;
}
.planContainer .price p.bestPlanPrice {
	background: #f7814d;
}
.planContainer .price p span {
	color: #8394ae;
}
.planContainer .options {
	margin-top: 10em;
}
.planContainer .options li {
	font-weight: 700;
	color: #364762;
	line-height: 2.5;
}
.planContainer .options li span {
	font-weight: 400;
	color: #979797;
}
.planContainer .button a {
	text-transform: uppercase;
	text-decoration: none;
	color: #3e4f6a;
	font-weight: 700;
	letter-spacing: 3px;
	line-height: 2.8em;
	border: 2px solid #3e4f6a;
	display: inline-block;
	width: 80%;
	height: 2.8em;
	border-radius: 4px;
	margin: 1.5em 0 1.8em;
}
.planContainer .button a.bestPlanButton {
	color: #fff;
	background: #f7814d;
	border: 2px solid #f7814d;
}
#credits {
	text-align: center;
	font-size: .8em;
	font-style: italic;
	color: #777;
}
#credits a {
	color: #333;
}
#credits a:hover {
	text-decoration: none;
}
@media screen and (min-width: 481px) and (max-width: 768px) {
#pricePlans #plans .plan {
	width: 49%;
	margin: 0 2% 20px 0;
}
#pricePlans #plans > li:nth-child(2n) {
	margin-right: 0;
}
}
@media screen and (min-width: 769px) and (max-width: 1024px) {
#pricePlans #plans .plan {
	width: 49%;
	margin: 0 2% 20px 0;
}
#pricePlans #plans > li:nth-child(2n) {
	margin-right: 0;
}
}
@media screen and (min-width: 1025px) {
#pricePlans {
	margin: 2em auto;
}
#pricePlans #plans .plan {
	width: on:;
	margin: 0 1.33% 20px 0;
	-webkit-transition: all .25s;
	   -moz-transition: all .25s;
	    -ms-transition: all .25s;
	     -o-transition: all .25s;
	        transition: all .25s;
}
#pricePlans #plans > li:last-child {
	margin-right: 0;
}
#pricePlans #plans .plan:hover {
	-webkit-transform: scale(1.04);
	   -moz-transform: scale(1.04);
	    -ms-transform: scale(1.04);
	     -o-transform: scale(1.04);
	        transform: scale(1.04);
}
.planContainer .button a {
	-webkit-transition: all .25s;
	   -moz-transition: all .25s;
	    -ms-transition: all .25s;
	     -o-transition: all .25s;
	        transition: all .25s;
}
.planContainer .button a:hover {
	background: #3e4f6a;
	color: #fff;
}
.planContainer .button a.bestPlanButton:hover {
	background: #ff9c70;
	border: 2px solid #ff9c70;
}
}

No menu PROJECT clique em New Folder e informe o nome fotos. A seguir inclua algumas imagens que deseja exibir nesta pasta.

Após isso abra a tabela Employees e altere no campo PhotoPath o nome das imagens conforme os nomes das imagens que você incluiu na pasta fotos.

Agora vamos abrir o arquivo code-behind Default.aspx.cs e definir o código baixo no evento Load para carregar os dados no DropDownList:

 protected void Page_Load(object sender, EventArgs e)
  {
        if (!IsPostBack)
        {
            BindData();
        }
 }

No código acima criamos um objeto DataTable e chamamos o método GetDados() para preencher o DataTable.

O código do método GetDados() é dado a seguir:

protected void BindData()
    {
        SqlConnection conn = null;
        try
        {
            conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;Initial Catalog=Northwind;Integrated Security=True");
            DataSet ds = new DataSet();
            DataTable FromTable = new DataTable();
            conn.Open();
            string cmdstr = "Select top 6 * from Employees";
            SqlCommand cmd = new SqlCommand(cmdstr, conn);
            SqlDataAdapter adp = new SqlDataAdapter(cmd);
            adp.Fill(ds);
            DtlImagens.DataSource = ds.Tables[0];
            DtlImagens.DataBind();
        }
        catch (Exception ex)
        {
            lblerro.Text = ex.Message;
        }
        finally
        {
            conn.Close();
        }
    }

A seguir definimos as configurações do DropDownList - ddlImagem e percorremos cada item incluindo o caminho da imagem para o país a ser exibido no controle com base no nome do país.

Executando o projeto iremos obter a exibição da página abaixo onde vemos a imagem de cada país exibida na frente do nome do país:

Pegue o projeto completo aqui: DataList_Imagens.zip

Lucas 5:31 - E Jesus, respondendo, disse-lhes: Não necessitam de médico os que estão sãos, mas, sim, os que estão enfermos;

Lucas 5:32 - Eu não vim chamar os justos, mas, sim, os pecadores, ao arrependimento.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti