2012-11-07 1 views
2

Avoir trois cases à cocher dans le contrôle du répéteur. J'ai besoin du concept comme la liste des boutons radio. Lorsque je clique sur la case à cocher Première rangée en premier, les deux autres sont vérifiées La propriété est définie sur Faux. supposons que je vérifie le deuxième un moyen premier et troisième sont décochés.Événement de contrôle de répéteur non déclenché

Mon code design est ici:

 <asp:Repeater ID="repeaterItems" runat="server" 
                    onitemdatabound="repeaterItems_ItemDataBound" > 
    <ItemTemplate> 
     <table id="mytable" cellspacing="0" width="100%" align="center"> 
      <tr> 
       <td style="width: 18px;"> 
       <asp:Label ID="id" runat="server" Text='<%#Bind("fld_id")%>'></asp:Label> 
       </td> 
       <td style="width: 301px;"> 
       <asp:Label ID="Label1" runat="server" Text='<%#Bind("fld_Question")%>'></asp:Label> 
       </td> 
       <td style="width: 10px;"> 
        <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox1_CheckedChanged" /> 
       </td> 
       <td style="width: 30px;"> 
        <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox2_CheckedChanged"/> 
       </td> 
       <td style="width: 33px;"> 
        <asp:CheckBox ID="CheckBox3" runat="server" AutoPostBack="true" OnCheckedChanged="CheckBox3_CheckedChanged"/> 
       </td> 
      </tr> 
      </table> 
     </ItemTemplate> 
    </asp:Repeater> 

Code est:

protected void CheckBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox chk1 = sender as CheckBox; 
     RepeaterItem item = chk1.Parent as RepeaterItem; 
     CheckBox chk2 = item.FindControl("CheckBox2") as CheckBox; 
     chk2.Checked = false; 
    } 

    protected void CheckBox2_CheckedChanged(object sender, EventArgs e) 
    { 

    } 

    protected void CheckBox3_CheckedChanged(object sender, EventArgs e) 
    { 

    } 

    protected void repeaterItems_ItemCreated1(object sender, RepeaterItemEventArgs e) 
    { 
     RepeaterItem ri = (RepeaterItem)e.Item; 

     if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem) 
     { 
      CheckBox chk = (CheckBox)e.Item.FindControl("CheckBox1"); 
      chk.CheckedChanged += new EventHandler(CheckBox1_CheckedChanged); 
     } 
    } 

événement CheckBox1_CheckedChanged ne se déclenche pas. S'il vous plaît aidez-moi à corriger cette erreur. J'ai passé plus de temps pour résoudre ce problème, mais je ne peux pas ..

+0

Que voulez-vous faire sur la case à cocher vérifier le changement. Voulez-vous cocher une autre case dans le répéteur. Pour cela, vous devez utiliser java-script ou jQuery. –

+0

vous pouvez le faire avec jquery .. s'il vous plaît se référer au lien suivant: http://stackoverflow.com/questions/11687370/select-a-single-item-in-checkbox-list-using-c-sharp –

Répondre

1

Assurez-vous que vous êtes ne lie pas le répéteur à la publication, et que viewstate est activé sur le répéteur.

Il n'y a aucune raison pour laquelle vous devriez vous lier à l'événement itemcreated sur le répéteur, juste pour attacher à l'événement oncheckedchanged, car cela est inutile.

0

Vous pouvez utiliser le même événement gestionnaire CheckBox1_CheckedChanged pour tous les trois cases OnCheckedChanged. En utilisant l'objet émetteur, vous pouvez savoir quelle case a déclenché l'événement, puis régler les deux autres cases checked propriété à false.

+0

CheckBox1_CheckedChanged – user1804985

0

vous pouvez obtenir par aussi JQuery

<head runat="server"> 
    <title></title> 
    <script language="javascript" type="text/javascript" src="Scripts/jquery-1.8.2.min.js"></script> 
    <script language="javascript" type="text/javascript"> 
     $(document).ready(function() { 
      $('.chkGroup').change(function() { 
       var parentTr = $(this).parent().parent(); 
       var currentCheckID = $(this).find('input').attr("id"); 
       $(parentTr).find('.chkGroup input').each(function() { 
        if (currentCheckID != $(this).attr("id")) { 

         $(this).removeAttr("checked"); 
        } 
       }); 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Repeater ID="repeaterItems" runat="server" onitemdatabound="repeaterItems_ItemDataBound"> 
      <ItemTemplate> 
       <table id="mytable" cellspacing="0" width="100%" align="center"> 
        <tr> 
         <td style="width: 18px;"> 
          <asp:Label ID="id" runat="server" Text='<%#Bind("ID")%>'></asp:Label> 
         </td> 
         <td style="width: 301px;"> 
          <asp:Label ID="Label1" runat="server" Text='<%#Bind("Name")%>'></asp:Label> 
         </td> 
         <td style="width: 10px;"> 
          <asp:CheckBox ID="CheckBox4" runat="server" CssClass="chkGroup" /> 
         </td> 
         <td style="width: 30px;"> 
          <asp:CheckBox ID="CheckBox5" runat="server" CssClass="chkGroup" /> 
         </td> 
         <td style="width: 33px;"> 
          <asp:CheckBox ID="CheckBox6" runat="server" CssClass="chkGroup" /> 
         </td> 
        </tr> 
       </table> 
      </ItemTemplate> 
     </asp:Repeater> 
    </div> 
    </form> 
</body> 
+0

Rien ne s'est passé .. – user1804985

+0

est-ce que vous définissez le lien JQuery et la classe si nécessaire dans la case à cocher de repeaterItems? –

Questions connexes