Usuário com melhor resposta
Alterar texto de um label dentro do datalist

Pergunta
-
Respostas
-
Segue o exemplo.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataList.aspx.cs" Inherits="WebApplication1.DataList" %> <!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> </head> <body> <form id="form1" runat="server"> <div> <asp:DataList ID="dtListCores" runat="server" onitemdatabound="dtListCores_ItemDataBound"> <HeaderTemplate> Cores </HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lblCor"/> </ItemTemplate> </asp:DataList> </div> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class DataList : System.Web.UI.Page { private int count = 1; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List<string> cores = new List<string>(); cores.Add("verde"); cores.Add("azul"); cores.Add("amarelo"); cores.Add("vermelho"); dtListCores.DataSource = cores; dtListCores.DataBind(); } } protected void dtListCores_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)e.Item.FindControl("lblCor"); string cor = e.Item.DataItem.ToString(); lbl.Text = string.Format("{0}. {1}", count, cor); count++; } } } }
Resultado:
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Marcado como Resposta Diogo_Costa segunda-feira, 26 de março de 2012 19:31
-
Oi Diego, claro que é possível.
Como Eu não sei o que você está fazendo extamente Eu alterei o exemplo.
1 carrego o dataList. Depois você pode entrar com o nome de uma cor existente no datalist e deve clicar em "alterar". Se existir eu altero o Label. Espero que lhe ajude.
abraço
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataList.aspx.cs" Inherits="DataList" %> <!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> </head> <body> <form id="form1" runat="server"> <div> <asp:DataList ID="dtListCores" runat="server" Height="32px" Width="124px"> <HeaderTemplate> Cores </HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lblCor"/> </ItemTemplate> </asp:DataList> </div> <br /> <br /> Nome da cor: <br /> <br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> <br /> <asp:Button ID="btnAlterarLabel" runat="server" Text="Alterar label" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class DataList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //handler que executa o Click do botão Alterar Label. //Pode setar diretamente no evento click do html... é o mais comum. btnAlterarLabel.Click += btnAlterarLabel_Click; if (!IsPostBack) { //Utilizado apenas para setar o Text do Label em tempo de execução. Pode ser configurado diretamente //no aspx. dtListCores.ItemDataBound += dtListCores_ItemDataBound; //bind do dataList CarregarDataList(); } } protected void dtListCores_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)e.Item.FindControl("lblCor"); string cor = e.Item.DataItem.ToString(); lbl.Text = e.Item.DataItem.ToString(); } } protected void btnAlterarLabel_Click(object sender, EventArgs e) { string busca = TextBox1.Text; foreach (DataListItem _item in dtListCores.Items) { if (_item.ItemType == ListItemType.Item || _item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)_item.FindControl("lblCor"); //se o Text for igual ao digitado no TextBox, alterar o Text do Label //veja que utilizo .ToUpper para não ter problemas entre letras minuscula/maiuscula if(lbl.Text.ToUpper().Equals(busca.ToUpper())) { lbl.Text = string.Format(">>> {0} <<<", lbl.Text); } } } } void CarregarDataList() { List<string> cores = new List<string>(); cores.Add("verde"); cores.Add("azul"); cores.Add("amarelo"); cores.Add("vermelho"); dtListCores.DataSource = cores; dtListCores.DataBind(); } }
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Sugerido como Resposta rs.developer sábado, 24 de março de 2012 16:38
- Marcado como Resposta Diogo_Costa segunda-feira, 26 de março de 2012 19:31
Todas as Respostas
-
Bom dia Diogo.
Você tem que percorrer o DataList (ItemDataBound) e encontrar o Label com um FindControl. Após isto basta manipular o mesmo. Vou fazer um exemplo e posto já.
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum. -
Segue o exemplo.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DataList.aspx.cs" Inherits="WebApplication1.DataList" %> <!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> </head> <body> <form id="form1" runat="server"> <div> <asp:DataList ID="dtListCores" runat="server" onitemdatabound="dtListCores_ItemDataBound"> <HeaderTemplate> Cores </HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lblCor"/> </ItemTemplate> </asp:DataList> </div> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WebApplication1 { public partial class DataList : System.Web.UI.Page { private int count = 1; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { List<string> cores = new List<string>(); cores.Add("verde"); cores.Add("azul"); cores.Add("amarelo"); cores.Add("vermelho"); dtListCores.DataSource = cores; dtListCores.DataBind(); } } protected void dtListCores_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)e.Item.FindControl("lblCor"); string cor = e.Item.DataItem.ToString(); lbl.Text = string.Format("{0}. {1}", count, cor); count++; } } } }
Resultado:
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Marcado como Resposta Diogo_Costa segunda-feira, 26 de março de 2012 19:31
-
E ae Paulo,
Me perdoa, mas esqueci de dizer que eu queria setar um valor pro label pelo evento do button. Isso é possível?
Muito obrigado pela resposta. Testei o seu exemplo e funciona perfeitamente, mas eu tenho essa particularidade. =/
Mais alguma sugestão?
Obrigado
-
Oi Diego, claro que é possível.
Como Eu não sei o que você está fazendo extamente Eu alterei o exemplo.
1 carrego o dataList. Depois você pode entrar com o nome de uma cor existente no datalist e deve clicar em "alterar". Se existir eu altero o Label. Espero que lhe ajude.
abraço
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DataList.aspx.cs" Inherits="DataList" %> <!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> </head> <body> <form id="form1" runat="server"> <div> <asp:DataList ID="dtListCores" runat="server" Height="32px" Width="124px"> <HeaderTemplate> Cores </HeaderTemplate> <ItemTemplate> <asp:Label runat="server" ID="lblCor"/> </ItemTemplate> </asp:DataList> </div> <br /> <br /> Nome da cor: <br /> <br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <br /> <br /> <asp:Button ID="btnAlterarLabel" runat="server" Text="Alterar label" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class DataList : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //handler que executa o Click do botão Alterar Label. //Pode setar diretamente no evento click do html... é o mais comum. btnAlterarLabel.Click += btnAlterarLabel_Click; if (!IsPostBack) { //Utilizado apenas para setar o Text do Label em tempo de execução. Pode ser configurado diretamente //no aspx. dtListCores.ItemDataBound += dtListCores_ItemDataBound; //bind do dataList CarregarDataList(); } } protected void dtListCores_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)e.Item.FindControl("lblCor"); string cor = e.Item.DataItem.ToString(); lbl.Text = e.Item.DataItem.ToString(); } } protected void btnAlterarLabel_Click(object sender, EventArgs e) { string busca = TextBox1.Text; foreach (DataListItem _item in dtListCores.Items) { if (_item.ItemType == ListItemType.Item || _item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)_item.FindControl("lblCor"); //se o Text for igual ao digitado no TextBox, alterar o Text do Label //veja que utilizo .ToUpper para não ter problemas entre letras minuscula/maiuscula if(lbl.Text.ToUpper().Equals(busca.ToUpper())) { lbl.Text = string.Format(">>> {0} <<<", lbl.Text); } } } } void CarregarDataList() { List<string> cores = new List<string>(); cores.Add("verde"); cores.Add("azul"); cores.Add("amarelo"); cores.Add("vermelho"); dtListCores.DataSource = cores; dtListCores.DataBind(); } }
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum.- Sugerido como Resposta rs.developer sábado, 24 de março de 2012 16:38
- Marcado como Resposta Diogo_Costa segunda-feira, 26 de março de 2012 19:31
-
Fala Paulo,
Excelente!
Porém, não tive o resultado que eu estava esperando.
O que eu estou tentando fazer é um sistema de comentários, onde estou exibindo os comentários pelo datalist. Eu estou querendo que quando o usuario cadastra-se um comentário aparecesse uma mensagem nele dizendo que o comentário passaria por uma moderação ou algo do tipo. Então pensei em usar o label.
protected void btnAlterarLabel_Click(object sender, EventArgs e) { string busca = TextBox1.Text; foreach (DataListItem _item in dtListCores.Items) { if (_item.ItemType == ListItemType.Item || _item.ItemType == ListItemType.AlternatingItem) { Label lbl = (Label)_item.FindControl("lblCor"); //se o Text for igual ao digitado no TextBox, alterar o Text do Label //veja que utilizo .ToUpper para não ter problemas entre letras minuscula/maiuscula if(lbl.Text.ToUpper().Equals(busca.ToUpper())) { lbl.Text = string.Format(">>> {0} <<<", lbl.Text); } } } }
Nesse ultimo exemplo que você me passou, ele colocar essa mensagem em todos os registros que o datalist está exibindo e eu queria mostrar só no que a pessoa cadastrou naquela hora.
Mais alguma idéia?
Obrigado
- Sugerido como Resposta Seilor Bonancio JuniorModerator segunda-feira, 26 de março de 2012 11:41
-
Não não... não coloca em todos os Labels não. Veja que Ele altera o Label apenas onde tem o nome igual o digitado no TextBox. Como Eu disse, não sabia o que você queria. Neste caso O label pode ficar fora do DataList e a cada comentário você apenas exibe a mensagem.
Paulo César Viana
.NET Developer
MCC - Microsoft Community Contributor
MCP - Microsoft Certified Professional
MCTS - Microsoft Certified Technology Especialist
--
Marque as respostas e contribua para uma melhora no fórum. -
Acho que eu estou fazendo alguma coisa errada então...
Aqui é o meu datalist, o lblMensagem é o que eu estou tentando setar o valor.
<asp:DataList ID="dlComentarios" runat="server" RepeatColumns="1"> <ItemTemplate> <asp:Label ID="lblMensagem" runat="server" ></asp:Label><br /><br /> <asp:Label ID="lblNome" runat="server" Text='<%# Eval("NOME") %>'></asp:Label><br /><br /> <asp:Label ID="lblData" runat="server" Text='<%# Eval("DATA") %>'></asp:Label><br /><br /> <asp:Label ID="lblComentario" runat="server" Text='<%# Eval("COMENTARIO") %>'></asp:Label> <div class="tgl"> <h2>Conteúdo um</h2> <p>Lorem ipsum dolor sit amet, consectetuer...</p> </div> </ItemTemplate> </asp:DataList>
Aqui é o método que cadastra os comentários, no final eu estou retornando os comentários para que ele mostre o comentario cadastrado na hora.
ComentarioBO comentarioBO = new ComentarioBO(); List<tb_comentarios> lista = comentarioBO.RetornarComentarios().ToList(); dlComentarios.DataSource = lista.Where(p => p.ARTIGO_ID == idMateria); dlComentarios.DataBind(); foreach (DataListItem _item in dlComentarios.Items) { Label lbl = (Label)_item.FindControl("lblMensagem"); lbl.Text = "MEnsagem teste"; }
Antes de cadastrar(não repare na bagunça, ainda estou acertando as coisas... ;D ):
E logo após ter feito o cadastro:
Repare que apareceu nos 4 comentários que eu tenho cadastrado, não seria por causa do foreach?
-
Diego,
Neste caso sim, altera todos os Label's. Você não concorda que basta ter apenas 1 Label fora do DataList?? Não tem porque ter 1 dentro do dataList...
Paulo César Viana
MCC|MCP|MCTS --
Marque as respostas e contribua para uma melhora no fórum. -
"Diogo"... hehe, todo mundo troca por Diego =D
Então, também pensei nessa possibilidade, mas eu queria mesmo é que aparecesse no corpo do comentários... =/....
Mas vou fazer mesmo do jeito que você sugeriu...
Muito obrigado pela força Paulo.
Abraços...
-