2009-10-05 7 views
0

Pas vraiment sûr de savoir comment gérer ce problème, mais ici va ...Contrôle Checkboxes l'intérieur d'une ligne GridView dans ASP.NET

J'ai un gridview avec deux cases à cocher pour chaque ligne, ci-dessous est un exemple du modèle d'élément :

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server"/> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" /> 
</ItemTemplate> 

Je souhaite que le « permis » propriété du ChildCheckbox à contrôler par la propriété « checked » du MasterCheckbox ... en d'autres termes, le ChildCheckbox est activé uniquement lorsque l'MasterCheckbox a été vérifié.

Je sais que je devrai ajouter un gestionnaire sur le contrôle MasterCheckbox pour appeler du javascript pour effectuer les actions nécessaires côté client - cela sera probablement fait dans la méthode row_databound()?

Je n'arrive pas à trouver le javascript requis pour que cela fonctionne, donc des astuces/conseils seraient les bienvenus.

Merci

Dal

Répondre

2

D'abord, vous ne avez pas besoin de répondre à votre question, vous pouvez ajouter des commentaires dans votre première question.

Puisque vous utilisez GridView, je pense que vous liez quelque chose pour MasterCheckBox, alors disons que c'est une valeur booléenne dans un DataTable. Par exemple, il y a une ligne contaning colonne avec le nom IsMasterChecked

Vous pouvez gérer Activation de l'autre avec les expressions de liaison personnalisés comme

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" /> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" Enabled='<%# Convert.ToBoolean(Eval("IsMasterChecked")) %>'/> 
</ItemTemplate> 

ou

<ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" /> 
    <asp:CheckBox ID="ChildCheckbox" runat="server" Enabled='<%# Convert.ToBoolean(Eval("IsMasterChecked")) ? "true" : "false" %>'/> 
</ItemTemplate> 

Hope this helps.

+0

Merci Myra - Cela devrait le faire ... le message se déplace vers le haut même si vous ajoutez un commentaire? Ta. – Dal

+0

Postes les plus votés aller en haut :) – Myra

0

Du haut de ma tête, je pense que ce que vous avez à faire est quelque chose le long des lignes de ce qui suit ...

<asp:TemplateField HeaderText="Checkbox"> 
    <ItemTemplate> 
    <asp:CheckBox ID="MasterCheckbox" runat="server" AutoPostBack="true" OnCheckedChanged="checkGridViewChkBox" /> 
    </ItemTemplate> 
    </asp:TemplateField> 

Avec le code suivant derrière.

CheckBox MasterCheckbox; 
CheckBox ChildCheckbox; 

private void checkGridViewChkBox() 
{ 
    int i; 
    int x = GridView1.Rows.Count; 

    for (i = 0; i < x; i++) //loop through rows 
    { 
     findControls(i); 

     if (MasterCheckbox.Checked) 
     { 
      ChildCheckbox.Enabled = true; 
     }else{  
     ChildCheckbox.Enabled = false;  
     }  
    } 

} 

private void findControls(int i) 
{                
    MasterCheckbox = (CheckBox)(GridView1.Rows[i].FindControl("MasterCheckbox")); 
    ChildCheckbox = (CheckBox)(GridView1.Rows[i].FindControl("ChildCheckbox")); 
} 

Ce n'est pas très efficace mais ça marche.

Questions connexes