2016-04-26 113 views
2

我在GridView中有三個複選框,但用戶只能選擇一個複選框。所以如果他們選擇第一個複選框,我需要提醒他們他們不能選擇其他兩個。檢查GridView中的複選框是否勾選

 <asp:GridView CssClass="tblResults" runat="server" ID="dgDetails" 
       OnRowDataBound="dgDetails_ItemDataBound" 
       DataKeyField="ID" AutoGenerateColumns="false" 
      AlternatingRowStyle-BackColor="#EEEEEE"> 
      <HeaderStyle CssClass="tblResultsHeader" /> 
       <Columns> 
        <asp:TemplateField HeaderText="Approved1"> 
         <ItemTemplate> 
          <asp:CheckBox runat="server" ID="chkApproved1" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Approved2"> 
         <ItemTemplate> 
          <asp:CheckBox runat="server" ID="chkApproved2" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="Approved3"> 
         <ItemTemplate> 
          <asp:CheckBox runat="server" ID="chkApproved3" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        </Columns> 
      </asp:GridView> 

後面的代碼:

protected void dgDetails_ItemDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      GridView gv = sender as GridView; 
      Quote.QuoteDetails qd = e.Row.DataItem as Quote.QuoteDetails; 

      CheckBox chkApproved1 = e.Row.FindControl("chkApproved1") as CheckBox; 
      CheckBox chkApproved2 = e.Row.FindControl("chkApproved2") as CheckBox; 
      CheckBox chkApproved3 = e.Row.FindControl("chkApproved3") as CheckBox; 
     } 
    } 

我試圖用這樣的查詢:

$('#<%= chkApproved1.ClientID %>').change(function() { 
       if($(this).is(":checked")) { 

        } 
      }); 

但導致錯誤:在當前不存在名稱 'chkApproved1'上下文。

那麼如何檢查GridView中的複選框是否被勾選?

+0

只有公共頁面成員中<%=...%>令牌訪問。將複選框控件修飾符更改爲public,它應該可以工作。 –

+0

將一個類應用於複選框,並按類選擇它們 - 無法找到該id,因爲它是由gridview動態創建的,而不是先前的 – Aristos

回答

3

,如果你想給警告,如果第一個複選框被選中使用下面的腳本

$(document).ready(function() {  

     $("table[id$='dgDetails']").find("input[id*='chkApproved1']").change(function() { 
        if ($(this).is(":checked")) { 
         alert('Hi'); 
        } 
       }); 
    }); 

下面是代碼,這將幫助你防止其他複選框,以檢查是否首先被選中。

   if ($(this).is(":checked")) {      
        if ($(this).attr("id").indexOf("chkApproved1") != -1) { var1 = 1 } 
        if ($(this).attr("id").indexOf("chkApproved2") != -1) { var2 = 1 } 
        if ($(this).attr("id").indexOf("chkApproved3") != -1) { var3 = 1 } 
        if (var1 == 1 && var2 == 1 && var3 == 1) { 
         var2 = 0; var3 = 0; 
         $("table[id$='dgDetails']").find("input[id*='chkApproved2']").attr("checked", false); 
         $("table[id$='dgDetails']").find("input[id*='chkApproved3']").attr("checked", false); 
        } 
        else if (var1 == 1 && var2 == 1) { 
         if ($(this).attr("id").indexOf("chkApproved1") != -1) { var1 = 0 } 
         if ($(this).attr("id").indexOf("chkApproved2") != -1) { var2 = 0 } 
         alert('You can\'t select this checkbox2'); 
         $(this).attr("checked", false); 
        } 
        else if (var1 == 1 && var3 == 1) { 
         if ($(this).attr("id").indexOf("chkApproved1") != -1) { var1 = 0 } 
         if ($(this).attr("id").indexOf("chkApproved3") != -1) { var3 = 0 } 
         alert('You can\'t select this checkbox3'); 
         $(this).attr("checked", false); 
        } 
       } 
       else { 
        if ($(this).attr("id").indexOf("chkApproved1") != -1) { var1 = 0 } 
        if ($(this).attr("id").indexOf("chkApproved2") != -1) { var2 = 0 } 
        if ($(this).attr("id").indexOf("chkApproved3") != -1) { var3 = 0 } 
       } 

希望這有助於

+0

感謝您的幫助。但是,我怎樣才能看到他們是否嘗試檢查第二個複選框,但是第一個複選框已被選中?他們只能一次檢查一個 – user123456789

+0

@ user123456789,試着將這個'.find(「input [id * ='chkApproved1']」)'改爲'.find(「input [id * ='chkApproved']」 )',讓我知道這是否有效。 – Ansari

+0

你可以在檢查後使用一些變量,比如'var1 = 0,var2 = 0,var3 = 0',將相應的值設置爲'1',然後你可以比較所有三個變量。即「if($(this).attr(」id「)。indexOf(」chkApproved1「)!= - 1){var1 = 1}' – Ansari