2012-11-07 34 views
2

我在中繼控制中有三個複選框。我需要像單選按鈕列表這樣的概念。當我單擊第一行第一個複選框時,其他兩個被選中的屬性設置爲false。假設我檢查第二個意味着第一個和第三個未選中。直放站控制複選框事件沒有被觸發

我設計的代碼是在這裏:

 <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> 

代碼:

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); 
     } 
    } 

CheckBox1_CheckedChanged事件不火。請幫我解決這個錯誤。 我花了更多的時間來解決這個問題,但我不能..

+0

你想在複選框檢查更改上做什麼?要檢查中繼器中的另一個複選框。爲此,您應該使用java-script或jQuery。 –

+0

你可以使用jquery ..請參考以下鏈接: http://stackoverflow.com/questions/11687370/select-a-single-item-in-checkbox-list-using-c-sharp –

回答

1

只要確保你不要在回發站上綁定中繼器,並且在中繼器上啓用該視圖狀態。

沒有理由爲什麼你應該綁定到中繼器上的itemcreated事件,只是爲了附加到oncheckedchanged事件,因爲這是毫無意義的。

0

您可以使用相同的事件CheckBox1_CheckedChanged處理程序的所有三個複選框OnCheckedChanged。 通過使用發件人的對象,你可以知道哪些複選框被引發的事件,然後將其他兩個的複選框checked屬性false.

+0

CheckBox1_CheckedChanged not fired .. – user1804985

0

就可以實現同樣的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

什麼都沒有發生.. – user1804985

+0

你是否在repeaterItems的複選框中設置了需要的JQuery鏈接和類? –