如何在jquery中禁用gridview中的复选框?

时间:2016-12-27 10:40:26

标签: jquery asp.net gridview

您好我在jquery的帮助下开发了一个asp.net应用程序。我的应用程序中有一个gridview。它有每行的复选框。与复选框一起,我将一些值绑定到隐藏字段。 这是我的gridview代码。

<asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="chkRow" runat="server" />
                <asp:HiddenField ID="Hidden" runat="server" Value='<%#Eval("Name")%>' />
            </ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="150" />

上面的代码呈现输出,例如

           Name
   chkbox  Andy
   chkbox  Marry
   chkbox  Daniel

我将相同的名称(在Boundfield中使用)绑定到hiddenfield。我有一个带有多选功能的下拉菜单。每当我从下拉列表中选择Andy时,我想在gridview中禁用Andy复选框。我正在尝试如下。我在第一个数组中得到dropdownselected值,在第二个数组中得到所有隐藏值字段。我将常见元素推送到第三个数组。 这是我的代码。

 var result = new Array();
            for (var i = 0; i < ResultArrayFirst.length; i++) {
                if (selected.indexOf(ResultArrayFirst[i]) >= 0) {
                    result.push(ResultArrayFirst[i]);
                }
            }

例如,结果数组将包含诸如Andy,Marry之类的值。在这种情况下,我想禁用网格中的复选框,这是留给安迪和玛丽。我尝试了最好的水平,无法解决它。任何帮助,将不胜感激。谢谢你。

我尝试如下。

for (var k = 0; k < result.length; k++)
            {
                $('#<%= GridView1.ClientID %> input[type="hidden"]').each(function () {

                    if($(this).val()==result[k])
                    {

                       //Not sure how to hide disable checkbox GridView1.rows[i].cells[0].getElementsByTagName("INPUT")[0].checked = true;
                    }
                });
                break;
            }

这还不行。需要任何帮助

1 个答案:

答案 0 :(得分:1)

为了清楚起见,我将消除你的大多数例子。一旦你看到了什么,你可以把你需要的东西放回去。

首先,大局:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
  <Columns>
    <asp:TemplateField HeaderText="user_name" SortExpression="user_name">
      <ItemTemplate>
        <input id="CheckBox1" runat="server" type="checkbox" 
           class="cbName" cbid='<%# Eval("user_id") %>' />

        <label id="Label1" runat="server" for="CheckBox1" >
           <asp:Literal ID="Literal1" runat="server" Text='<%# Bind("user_name") %>'></asp:Literal>
        </label>
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

<asp:ListBox ID="ListBox1" runat="server" 
    ClientIDMode="Static" SelectionMode="Multiple" Rows="10"
    DataSourceID="SqlDataSource1" 
    DataTextField="user_name" DataValueField="user_id" >
</asp:ListBox>

<script type="text/javascript">
  $(function () {
    $("#ListBox1").on("change", function () {
      $("#ListBox1 option").each(function (i,e) {
        var s = "input.cbName[cbid='" + $(this).val() + "']";
        $(s).prop("disabled", e.selected);
      });
    });
  });
</script>

发生了什么:

jquery正在监视ListBox以进行选择更改。

每次选择一个列表项时,我都会循环遍历一组列表项并构建一个类似于此的jquery选择器。

  

input.cbName[cbid=XXX] 其中XXX是某个索引值

  1. cbName是Gridview的唯一
  2. cbid对于GridView上的每个名称都是唯一的,并与ListItem value属性配对
  3. 这将查找并执行gridview中与其关联的列表项配对的每个项目。这样做是为了避免由于ASP服务器控件附带的名称错位而导致与查找gridview项相关的问题。

    以下代码段显示了一个带有工作jquery

    的渲染GridView和Listbox的示例

    &#13;
    &#13;
    $(function() {
      $("#ListBox1 option").on("click", function() {
    
        $("#ListBox1 option").each(function(i, e) {
          var s = "input.cbName[cbid='" + $(this).val() + "']";
          $(s).prop("disabled", e.selected);
        });
      });
    
    });
    &#13;
    #gv,#lb {
      display: inline-block;
      width:200px;
      vertical-align: top;
    }
    
    input.cbName[disabled],
    input.cbName[disabled] + label{
      cursor:not-allowed;
      color: red;
    }
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="gv">
      <div>
        <table cellspacing="0" rules="all" border="1" id="GridView1" style="border-collapse:collapse;">
          <tbody>
            <tr>
              <th scope="col">user_name</th>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl02$CheckBox1" type="checkbox" id="GridView1_CheckBox1_0" class="cbName" cbid="3032">
                <label id="GridView1_cblbl_0" for="CheckBox1">ALEXIS</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl03$CheckBox1" type="checkbox" id="GridView1_CheckBox1_1" class="cbName" cbid="1995">
                <label id="GridView1_cblbl_1" for="CheckBox1">ALI</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl04$CheckBox1" type="checkbox" id="GridView1_CheckBox1_2" class="cbName" cbid="2311">
                <label id="GridView1_cblbl_2" for="CheckBox1">ALMAZAR</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl05$CheckBox1" type="checkbox" id="GridView1_CheckBox1_3" class="cbName" cbid="1884">
                <label id="GridView1_cblbl_3" for="CheckBox1">ALTSHULER</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl06$CheckBox1" type="checkbox" id="GridView1_CheckBox1_4" class="cbName" cbid="3267">
                <label id="GridView1_cblbl_4" for="CheckBox1">ALTSHULER</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl07$CheckBox1" type="checkbox" id="GridView1_CheckBox1_5" class="cbName" cbid="1742">
                <label id="GridView1_cblbl_5" for="CheckBox1">ANTHONY</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl08$CheckBox1" type="checkbox" id="GridView1_CheckBox1_6" class="cbName" cbid="1697">
                <label id="GridView1_cblbl_6" for="CheckBox1">ANTHONY</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl09$CheckBox1" type="checkbox" id="GridView1_CheckBox1_7" class="cbName" cbid="2003">
                <label id="GridView1_cblbl_7" for="CheckBox1">BAEZ</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl10$CheckBox1" type="checkbox" id="GridView1_CheckBox1_8" class="cbName" cbid="2569">
                <label id="GridView1_cblbl_8" for="CheckBox1">BALDWIN</label>
              </td>
            </tr>
            <tr>
              <td>
                <input name="GridView1$ctl11$CheckBox1" type="checkbox" id="GridView1_CheckBox1_9" class="cbName" cbid="1863">
                <label id="GridView1_cblbl_9" for="CheckBox1">BRENNAN</label>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
    <div id="lb">
      <select size="10" name="ListBox1" multiple="multiple" id="ListBox1">
        <option value="3032">ALEXIS</option>
        <option value="1995">ALI</option>
        <option value="2311">ALMAZAR</option>
        <option value="1884">ALTSHULER</option>
        <option value="3267">ALTSHULER</option>
        <option value="1742">ANTHONY</option>
        <option value="1697">ANTHONY</option>
        <option value="2003">BAEZ</option>
        <option value="2569">BALDWIN</option>
        <option value="1863">BRENNAN</option>
    
      </select>
    </div>
    &#13;
    &#13;
    &#13;