• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

diogo.delgaudio

checkbox no repeater

3 mensagens neste tópico

bem pessoal, minha dúvida é a seguinte... coloquei no header do meu repeater um checkbox e a coluna abaixo deste header contém vários outros checkbox, gostaria q ao marcar o cabeçalho, todos os checkbox abaixo dele ficassem marcados e o mesmo acontecesse no inverso. mas n sei como verificar se este componente está marcado, alguém?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok...

O método mais fácil, mas que eu detesto pois obriga-te a fazer um post back e isso demora tempo... é usares este codigo

no ficheiro teste.aspx metes:

<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate><asp:CheckBox ID="checkAll" OnCheckedChanged="CheckBox1_CheckedChanged" Checked = "false" runat="server" AutoPostBack="true" />Select All<br /></HeaderTemplate>
<ItemTemplate><asp:CheckBox runat="server" ID="check" /><br /></ItemTemplate>
</asp:Repeater>

e no ficheiro teste.aspx.cs metes:

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

    private void BindData()
    {
        System.Collections.Generic.List<String> teste = new System.Collections.Generic.List<string>();
        for (int i = 0; i < 10; i++)
        {
            teste.Add(i.ToString());
        }
        Repeater1.DataSource = teste;
        Repeater1.DataBind();
    }

    protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox cMain = (CheckBox)sender;
        foreach (RepeaterItem ri in Repeater1.Items)
        {
            if (cMain.Checked)
            {
                if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
                {
                    CheckBox cb = (CheckBox)ri.FindControl("check");
                    cb.Checked = true;
                }
            }
            else
            {
                if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
                {
                    CheckBox cb = (CheckBox)ri.FindControl("check");
                    cb.Checked = false;
                }
            }
        }
    }

Tens depois uma solução que para mim é a ideal.... JAVASCRIPT :D

É mais rapido e mais leve, pois assim funciona no clientside e não precisas de estar a gastar recursos do servidor...

se tiveres duvidas é so postares :)

codigo no teste.aspx:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script language ="javascript">
    function CheckValues(source, args)
    {
        var ctrl = 'Repeater1'; 
        var cbName = 'check';
        var cbHead = 'checkAll'
        var objForm = document.form1; 
        var errorCount = 0; 
        var isChecked = false; 
        //very important to start at 0
        var i = 1;
    
        ctrlName = ctrl + '_ctl0' + i + '_' + cbName;
        var curItem = DOMCall(ctrlName);
        if(null == curItem)
        {
            alert (curItem.toString() + ' é nulo'); // something is wrong. Probably one of the 'Customize Values'
        }
        
        while (curItem != null)
        {
            //to check items inside the DataGrid/Repeater
            //using the != null check should keep it from getting locked up
            var header = DOMCall(ctrl+'_ctl00_'+cbHead);
            if (header.checked == true)
            curItem.checked = true;
            else
            curItem.checked = false;
            if(i >= 10)
            {
                ctrlName = ctrl + '_ctl' + i + '_' +  cbName;
            }
            else    
            {
                ctrlName = ctrl + '_ctl0' + i + '_' +  cbName;
            }      
                          
            curItem = DOMCall(ctrlName);  
            i += 1           
        }
    }
    function DOMCall(name) 
    {
      //Checks the DOM features available
       if (document.layers) //checks document.layers
            return document.layers[name];
       else if (document.all) //checks document.all
            return document.all[name];
       else if (document.getElementById) //checks getElementById
            return document.getElementById(name);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
        <HeaderTemplate><asp:CheckBox ID="checkAll"  Checked = "false" runat="server" />Select All<br /></HeaderTemplate>
        <ItemTemplate><asp:CheckBox runat="server" ID="check" /><br /></ItemTemplate>
        </asp:Repeater>
        </div>
    </form>
</body>
</html>

Codigo no teste.aspx.cs:

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

    private void BindData()
    {
        System.Collections.Generic.List<String> teste = new System.Collections.Generic.List<string>();
        for (int i = 0; i < 10; i++)
        {
            teste.Add(i.ToString());
        }
        Repeater1.DataSource = teste;
        Repeater1.DataBind();
    }

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Header)
        {
            for (int i = 0; i < e.Item.Controls.Count; i++)
            {
                if (e.Item.Controls[i] is System.Web.UI.WebControls.CheckBox)
                {
                    ((CheckBox)e.Item.Controls[i]).Attributes.Add("onclick", "return CheckValues(); return false;");
                }
            }
        }
    }

Bom... agora que ja resolvi o teu problema vou para a cama

Hasta :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora