2011-08-25 3 views
1

J'utilise la fonction de sélection de tous les quadrillages de here. Le script utilisé ici a un problème.Gridview Vérification de toutes les cases à cocher numéro

Si je sélectionne la case à cocher d'en-tête, toute la case à cocher du modèle (lignes) est sélectionnée. Si je désélectionne alors tout le template checbox, l'en-tête checbox reste toujours cochée. Comment désélectionner la case à cocher d'en-tête dans ce cas?

S'il vous plaît avis!

Répondre

1

Tout d'abord, je voudrais ajouter une classe Css à CheckBox1 pour une utilisation ultérieure class="chk-all".

Ensuite, ajoutez une fonction javascript à la case ItemTemplate.

<ItemTemplate> 
    <asp:CheckBox ID="CheckBox1" runat="server" onclick="UnselectAllOption()" /> 
</ItemTemplate> 

Puis, en utilisant une jQuery pour sélectionner la case à cocher qui a class="chk-all".

function UnselectAllOption(){ 
    $('.chk-all').attr("checked", false"); 
} 

Je donne la valeur sans contrôle dès que l'une des autres cases à cocher est cliqué, soit parce qu'aucun sont sélectionnés et vous sélectionnez une seule, de sorte que la case à cocher dans le HeaderTemplate ne doit pas être vérifié. OU toutes les cases à cocher sont déjà vérifiées, ce qui signifie que celui de HeaderTemplate ne doit pas être vérifié car vous changez l'un des autres pour ne pas être coché.

modifier

P.S. cette réponse vous oblige à ajouter une référence de script à la bibliothèque javascript jQuery.

1

C'est la façon dont .NET, mais des solutions jQuery sont beaucoup plus propres:

Script:

function resetParent(parentRow) 
{ 
    document.getElementById(parentRow).checked = false; 
} 

Markup:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    Caption="Pick Some Technologies" BackColor="White" BorderColor="#CC9966" OnRowDataBound="ObjectDataSource1__RowDataBound" 
    BorderStyle="None" BorderWidth="1px" CellPadding="4"> 
    <Columns> 
    <asp:TemplateField HeaderText="Include" SortExpression="Include"> 
     <HeaderTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" onclick="changeAllCheckBoxes(this)" /> 
     </HeaderTemplate> 
     <ItemTemplate> 
     <asp:CheckBox ID="CheckBox1" runat="server" /> 
     </ItemTemplate> 
     <ItemStyle HorizontalAlign="Center" /> 
    </asp:TemplateField> 
    <asp:BoundField DataField="Name" HeaderText="Technology" /> 
    </Columns> 
    <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" /> 
</asp:GridView> 

code-behind:

private CheckBox parentCheckBox = null; 
protected void ObjectDataSource1__RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     parentCheckBox = (CheckBox)e.Row.FindControl("CheckBox1"); 
    }  

    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     CheckBox childCheckBox = (CheckBox)e.Row.FindControl("CheckBox1"); 
     childCheckBox.Attributes.Add("onclick","resetParent('" + parentCheckBox.ClientID + "')"); 
    } 
} 
Questions connexes