在Gridview中启用/禁用文本框

时间:2019-11-29 13:53:30

标签: javascript jquery asp.net

我想在用户控件(ACSX页面)中选中复选框时禁用文本框。这些控件位于gridview中。

<div>
  <asp:GridView ID="gvModifOuvrageNonControles" runat="server" AutoGenerateColumns="false" SkinID="MarionGridView">
    <Columns>
      <asp:TemplateField HeaderText="NO CONTROL">
        <ItemTemplate>
          <asp:CheckBox ID="cbInspection" OnClick="grisé(this);" runat="server" />
        </ItemTemplate>
      </asp:TemplateField>
      <asp:TemplateField HeaderText="RAISON">
        <ItemTemplate>
          <asp:TextBox ID="txtCause" runat="server"></asp:TextBox>
        </ItemTemplate>
      </asp:TemplateField>
    </Columns>
  </asp:GridView>
</div>
function grisé(obj) {
  alert(obj.getAttribute('id'));
}

2 个答案:

答案 0 :(得分:1)

我假设此网格有3列,即2个Template字段和1个BoundField,因为在抓取文本框时将需要它。.

enter image description here

<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="gvModifOuvrageNonControles" runat="server" AutoGenerateColumns="false">
                <Columns>
                    <asp:BoundField DataField="ID" HeaderText="ID" />
                    <asp:TemplateField HeaderText="NO CONTROL">
                        <ItemTemplate>
                            <asp:CheckBox ID="cbInspection" OnClick="grisé(this);" runat="server" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="RAISON">
                        <ItemTemplate>
                            <asp:TextBox ID="txtCause" runat="server"></asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
        <script>
            //all disabled at first..
            (function () {
                debugger;
               var gvDrv = document.getElementById("<%=gvModifOuvrageNonControles.ClientID %>");
                for (i = 1; i < gvDrv.rows.length; i++) {
                    var cell = gvDrv.rows[i].cells[2];
                    cell.firstElementChild.disabled = true
                }
            })();


            function grisé(obj) {
                debugger;
                var rowData = obj.parentNode.parentNode;
                if (obj.checked) {
                    rowData.cells[2].firstElementChild.disabled = false
                }
                else {
                    rowData.cells[2].firstElementChild.disabled = true;
                }
            }

        </script>
    </form>
</body>

   --------------- code behind ----------------
 if (!IsPostBack)
        {
            BindGrid();
        }
    }

    private void BindGrid()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("ID");
        for (int i = 0; i < 10; i++)
        {
            var r = dt.NewRow();
            r["ID"] = i;
            dt.Rows.Add(r);
        }
        gvModifOuvrageNonControles.DataSource = dt;
        gvModifOuvrageNonControles.DataBind();
    }

答案 1 :(得分:0)

您必须做的第一件事就是将复选框的PostBack属性设置为true。

然后,您必须遍历gridview的项目模板,并使用FindControl方法找到该复选框。

一旦找到复选框控件,则需要为该复选框创建一个事件处理程序,并在选中该复选框后,再次使用FindControl方法,在gridview中查找文本框并执行操作。

这是在您的用户控件后面的代码中完成的。这是一种更清洁的方法,而不是尝试只为一个动作编写一个庞大的脚本。

请注意,我不在PC上,因此无法提供代码示例。