2009-10-24 14 views

Répondre

0
CheckBox Checkall = SendBoxrep.Controls[0].Controls[0].FindControl("Checkall") as CheckBox; 
1

Cela peut être facilement réalisé avec jQuery. Supposons que vous aviez le tableau ci-dessous, générée par votre répéteur:

<table> 
    <thead> 
     <tr> 
      <th><input type="checkbox" name="headerchk" id="headerchk" /></th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td><input type="checkbox" name="chk1" id="garbage1_added_my_repeater_chk" /></td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" name="chk2" id="garbage2_added_my_repeater_chk" /></td> 
     </tr> 
     <tr> 
      <td><input type="checkbox" name="chk3" id="garbage3_added_my_repeater_chk" /></td> 
     </tr> 
    </tbody> 
</table> 

Ensuite, vous pouvez attribuer un gestionnaire d'événements pour la case à cocher dans l'en-tête qui basculera toutes les autres cases à cocher:

$(function() { 
    $('#headerchk').change(function() { 
     // Toggle all inputs of type checkbox and with ids starting with chk: 
     $('input[type=checkbox][id$=chk]').attr('checked', this.checked); 
    }); 
}); 
+0

Une note de peu, parfois il y a un problème avec NamingContainer, il est préférable d'ajouter une chose permanente à la fin de id élément et utiliser $ ('entrée [type = checkbox] [id $ = foo] ') à la place. –

+0

@Mehdi, vous avez absolument raison à ce sujet. Habituellement, la poubelle est ajoutée au début des identifiants. Je vais modifier mon message. –

3

La meilleure réponse impliquerait javascript côté client. Vous obtiendrez l'identifiant des contrôles à l'aide controlName.clientID et l'ont codé dans le javascript ..

Mais voici la Dotnet naïve que répondre:

Étant donné le répéteur:

<asp:Repeater ID="Repeater1" runat="server"> 
    <HeaderTemplate> 
     <div> <asp:CheckBox ID="CheckBox1" runat="server" OnCheckedChanged="SetAllChecks" AutoPostBack="true" /></div> 
    <hr /> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <div> <asp:CheckBox ID="CheckBox2" Checked='<%# Container.DataItem("isChecked") %>' runat="server" /></div> 
    </ItemTemplate> 
    </asp:Repeater> 

Et le codebehind:

Imports System.Data 
Imports System.Collections 

Partial Class _Default 
Inherits System.Web.UI.Page 

Public Sub SetAllChecks(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim amIChecked As CheckBox = CType(sender, CheckBox) 

    Dim rowCt As Integer = Repeater1.Items.Count 
    Dim ridx As Integer = 0 
    For ridx = 0 To rowCt - 1 
     Dim cbox As CheckBox = CType(Repeater1.Items(ridx).FindControl("CheckBox2"), CheckBox) 
     cbox.Checked = amIChecked.Checked 
    Next 

End Sub 

Public Sub Repeater1_OnItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles Repeater1.ItemDataBound 

End Sub 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     Dim dt As New DataTable() 
     dt.Columns.Add(New DataColumn("isChecked")) 
     Dim tmprow As DataRow = dt.NewRow() 
     tmprow("isChecked") = True 
     dt.Rows.Add(tmprow) 
     tmprow = dt.NewRow() 
     tmprow("isChecked") = False 
     dt.Rows.Add(tmprow) 
     tmprow = dt.NewRow() 
     tmprow("isChecked") = False 
     dt.Rows.Add(tmprow) 
     tmprow = dt.NewRow() 
     tmprow("isChecked") = False 
     dt.Rows.Add(tmprow) 
     tmprow = dt.NewRow() 
     tmprow("isChecked") = False 
     dt.Rows.Add(tmprow) 

     Repeater1.DataSource = dt 
     Repeater1.DataBind() 

    End If 

End Sub 

End Class

+0

Mon code est C# no VB –

0

Voici la code correspondant C# de la réponse de Bill:

public void SetAllChecks(object sender, EventArgs e) 
{ 
    CheckBox amIChecked = (CheckBox)sender; 
    foreach (RepeaterItem ri in Repeater1.Items) 
    { 
     CheckBox cbox = (CheckBox)ri.FindControl("CheckBox2"); 
     cbox.Checked = amIChecked.Checked; 
    } 
}