none
adicionando Listview dinamicamente RRS feed

  • Pergunta

  • Boa Noite,

    estou com uma dúvida em asp.net c#....preciso seja criado listviews dinamicamente de acordo com um numero selecionado em um dropDownList....

    procurei em varios posts, mas não achei nada.....alguem poderia me ajudar?

    Obrigado
    quinta-feira, 17 de janeiro de 2013 22:01

Respostas

  • pessoal, consegui fazer aqui....

    o problema que estava encontrando quando adicionava dinamicamente o listview, era quando fazia listview2.datablind() antes de adicionar ao PlaceHolder...

    Agora inverti a ordem e deu certo....

    Obrigado 

    • Marcado como Resposta Eduardo MF segunda-feira, 21 de janeiro de 2013 13:24
    segunda-feira, 21 de janeiro de 2013 13:24

Todas as Respostas

  • Cara,

    Utilize o repeater disponível no VS.

    http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.aspx

    http://www.macoratti.net/aspn_rep.htm


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 17 de janeiro de 2013 22:10
  • eu ja utilizo o ItemTemplate e o AlternatingItemTemplate para apenas uma listview.....

    o meu problema é que se o usuario selecionar 4 quero criar 4 listview com o mesmo formato

    nesse caso o repeater pode ser utilizado também?

    quinta-feira, 17 de janeiro de 2013 22:16
  • Sim,

    Você precisa apenas de um repeater e dentro dele você coloca o listview e de acordo com o source ele irá repetir quantas vezes forem necessárias de uma forma dinamica o listview na sua aplicação:

    aspx:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Main.aspx.cs" Inherits="FocoEnter.Main" %>
    
    <!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 style="height: 488px">
            <asp:Repeater ID="rptTeste" runat="server">
            <ItemTemplate>
                <asp:Label ID="lblTeste" runat="server" Text='<%# Bind("Coluna") %>'></asp:Label>
            </ItemTemplate>
            </asp:Repeater>
        </div>
        </form>
    </body>
    </html>
    

    C#:

     protected void Page_Load(object sender, EventArgs e)
    {            
    
                DataTable dtTabela = new DataTable("Teste");
    
                dtTabela.Columns.Add("Coluna");
    
                for (int i = 0; i < 7; i++)
                {
                    dtTabela.NewRow();
                    dtTabela.Rows.Add("Teste " + i.ToString()); 
                }
    
                rptTeste.DataSource = dtTabela;
                rptTeste.DataBind();
    
    
    }

    Observe que tenho apenas uma label, porem ele vai repetir várias vezes a mesma label de acordo com o source do repeater.

    Atenciosamente, Samuel dos Anjos

    quinta-feira, 17 de janeiro de 2013 22:58
  • Certo, até agora consegui criar uma listview com o repeater....porém se tenho que criar 5 listview.....e separa-las por espaços, como coloco no codebehind para adicionar mais listview na pagina?

    quinta-feira, 17 de janeiro de 2013 23:17
  • Cara,

    Me desculpa mas lendo melhor o que você necessita, acho melhor trabalhar com o PlaceHolder:

    protected void Page_Load(object sender, EventArgs e)
    {
    HyperLink hyperlink1 = new HyperLink();
    hyperlink1.Text = "Devmanuals";
    hyperlink1.NavigateUrl = "http://www.devmanuals.com/";
    PlaceHolder1.Controls.Add(hyperlink1);
    
    }

    http://www.devmanuals.com/tutorials/ms/aspdotnet/placeholder.html

    http://msdn.microsoft.com/pt-br/library/system.web.ui.webcontrols.placeholder.aspx

    http://www.developerfusion.com/code/3826/adding-controls-to-placeholders-dynamically/


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 17 de janeiro de 2013 23:24
  • aspx:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="FocoEnter.WebForm2" %>
    
    <!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:DropDownList ID="ddl" runat="server" AutoPostBack="true" 
                onselectedindexchanged="ddl_SelectedIndexChanged">
            </asp:DropDownList>
        </div>
        
        <div>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        </div>
        </form>
    </body>
    </html>

    C#:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace FocoEnter
    {
        public partial class WebForm2 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    for (int i = 0; i < 10; i++)
                    {
                        ddl.Items.Insert(i, new ListItem(i.ToString(), i.ToString()));
                    }
                }        
             }
    
            protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
            {
                int intCount = Convert.ToInt32(ddl.SelectedValue);
    
                for (int i = 0; i < intCount; i++)
                {
                    TextBox T = new TextBox();
    
                    PlaceHolder1.Controls.Add(T);
                }
            }
        }
    }



    Atenciosamente, Samuel dos Anjos


    quinta-feira, 17 de janeiro de 2013 23:32
  • Certo.....

    agora so estou com um problema....

    se eu fizer isto 

                    ListView1.DataSource = cotacaoProduto;
                    ListView1.DataBind();
                    ListView listview2 = new ListView();
                    listview2 = ListView1;
                    listview2.DataSource = cotacaoProduto2;
                    listview2.DataBind();
                    placeHolder1.Controls.Add(listview2);

    o listview1 que possui o layoutTemplate, itemTemplate e AlternatingItemTemplate definidos na pagina aspx é apenas deslocado para o placeholder1....

    Acredito que a solução seria adicionar dinamicamente o LayoutTemplate, itemTemplate e AlternatingItemTemplate ao listView2.....porem não sei fazer isto,

    como consigo adicionar estes templates?

    quinta-feira, 17 de janeiro de 2013 23:52
  • Lembrando que criando dinamicamente vc precisa manter o estado do seu componente na viewstate para n perder o seu estado atual

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    sexta-feira, 18 de janeiro de 2013 10:42
    Moderador
  • como posso fazer isto dinamicamente?

    Obrigado

    segunda-feira, 21 de janeiro de 2013 10:01
  • pessoal, consegui fazer aqui....

    o problema que estava encontrando quando adicionava dinamicamente o listview, era quando fazia listview2.datablind() antes de adicionar ao PlaceHolder...

    Agora inverti a ordem e deu certo....

    Obrigado 

    • Marcado como Resposta Eduardo MF segunda-feira, 21 de janeiro de 2013 13:24
    segunda-feira, 21 de janeiro de 2013 13:24