在特定行的gridview中启用所需的字段验证器

本文关键字:字段 验证 启用 gridview | 更新日期: 2023-09-27 18:24:29

我已经实现了网格视图,如下代码行

<div  class="overflowX">
    <asp:GridView ID="grdView" AutoGenerateColumns="false" BorderWidth="0" OnRowCommand="grdView_RowCommand" runat="server" CssClass="table">
        <Columns>
            <asp:TemplateField HeaderText="Save It">
                <ItemTemplate>
                    <asp:CheckBox ID="chkbox" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Expiration Date">
                <ItemTemplate>
                    <asp:TextBox ID="txtExpirationDate" style="padding:12px 5px;" placeholder="(mm/dd/yyyy)" CssClass="datepiker" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="ValReqExpD" Enabled="false" Display="Dynamic" runat="server" ErrorMessage="Expiry Date cannot be Blank." ControlToValidate="txtExpirationDate"></asp:RequiredFieldValidator>
                    <asp:RegularExpressionValidator Display="Dynamic" ID="ValRegExpD" runat="server" ControlToValidate="txtExpirationDate" ErrorMessage="Enter a valid Expiry Date ." ValidationExpression="([1-9]|0[1-9]|1[012])([-/.])([1-9]|0[1-9]|[12][0-9]|3[01])([-/.])(19[5-9][0-9]|20[0-4][0-9])">
                        <b>Enter a valid Renewal Date</b>
                    </asp:RegularExpressionValidator><br />
                    <asp:CompareValidator ID="ValCmpSD" Display="Dynamic" runat="server" ControlToCompare="txtEffectiveDate" ControlToValidate="txtExpirationDate" ErrorMessage="Expiry Date should be greater than Effective date" Operator="GreaterThan" Type="Date"></asp:CompareValidator>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</div>

现在,我希望当用户选中特定行的复选框时,应该在该特定行中启用所需的feild验证"ValReqExpD"。。。

    protected void grdView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chk = (CheckBox)e.Row.FindControl("chkbox");
            RequiredFieldValidator rfv = (RequiredFieldValidator)e.Row.FindControl("ValReqED");
            if (chk.Checked == false)
            {
                  rfv.Enabled = false;
            }
        }
    }

我已经尝试了上面的代码,但它不起作用!!!

请帮帮我!!!

在特定行的gridview中启用所需的字段验证器

当前代码的问题是,当引发任何事件(如按钮单击等)时,都会引发gridView的RowCommand事件,但由于您的复选框控件没有执行任何操作,因此该事件不会触发任何操作。

您可以使用CheckBox控件附加CheckChanged事件,并启用如下的自动postback:-

<asp:CheckBox ID="chkbox" runat="server" OnCheckedChanged="chkbox_CheckedChanged" 
     AutoPostBack="true"/>

然后在后面的代码中,找到RequiredFieldValidator(位于选中复选框的行中),并像这样启用它:-

protected void chkbox_CheckedChanged(object sender, EventArgs e)
{
   CheckBox chkbox= sender as CheckBox;
   GridViewRow currentRow = chkbox.NamingContainer as GridViewRow;
   RequiredFieldValidator rfv = grdCustomer.Rows[currentRow.RowIndex]
                                      .FindControl("ValReqED") as RequiredFieldValidator;
   if (chkCustomer.Checked)
   {
      rfv .Enabled = true;
   }
}
  1. 首先,您需要在控制更改事件触发的CheckBox上添加服务器事件
  2. 然后触发您需要启用/禁用RequiredFieldValidator服务器控件的复选框的选中事件