2016-04-26 108 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