如何根据页面控件启用禁用验证器?

时间:2013-11-25 16:45:03

标签: c# asp.net validation gridview

我有一个gridView如下。

<asp:GridView ID="grvLocationCash" runat="server" AutoGenerateColumns="false" CssClass="gridtable" DataKeyNames="LocationId">
    <Columns>
        <asp:BoundField HeaderText="Location Name" DataField="LocationName" />
        <asp:TemplateField HeaderText="Amount">
            <ItemTemplate>
                <asp:TextBox ID="txtAmount" runat="server" CssClass="txtbox" Visible="true"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvAmount" runat="server" ControlToValidate="txtAmount" ErrorMessage="Please enter the Amount" Display="Dynamic" SetFocusOnError="true"></asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="rgvAmount" runat="server" ControlToValidate="txtAmount" ValidationExpression="^\d+$" ErrorMessage="Please enter whole numbers only" Display="Dynamic" SetFocusOnError="true"></asp:RegularExpressionValidator>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

和一个带有以下代码的保存按钮。

  <asp:Button ID="btnLocationAmountList" runat="server" OnClick="btnLocationAmountList_Click" Text="Save" Width ="100px" />

绑定gridview后,其中大约有20行。 当我在第一行的文本框中输入数字并按Enter键转到第二个文本框时,将触发所有其他19行的必填字段验证器

但是,如果我在第一个文本框中键入数字并在下一个文本框中单击鼠标,则不会触发RequiredFieldValidator。

只有点击保存按钮,才能验证页面。必须在保存之前为所有文本框输入值,并且所有值必须仅为整数。 (11,125,6589等)。 如何为特定控件启用禁用验证器?

更新:这是我的类文件中的page_load事件代码。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                BindGrid();
            }
        }


        protected void BindGrid()
        {
            FinanceServiceRef.FinanceServiceClient obj = new FinanceServiceRef.FinanceServiceClient("WSHttpBinding_IFinanceService");
            var ds = obj.ViewLocationAmountCashManagement();
            grvLocationCash.DataSource = ds;
            grvLocationCash.DataBind();
        }

2 个答案:

答案 0 :(得分:1)

您需要处理每个onkeydown中每个文本框中的ItemTemplate,如下所示:

onkeydown =“return(event.keyCode!= 13);”

<asp:TemplateField HeaderText="Amount">
    <ItemTemplate>
        <asp:TextBox ID="txtAmount" runat="server" CssClass="txtbox" 
                     Visible="true"
                     onkeydown = "return (event.keyCode != 13);">
        </asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>
  

注意: Enter 键的keyCode值为13.

答案 1 :(得分:0)

您是否尝试使用验证组属性?

<asp:GridView ID="grvLocationCash" runat="server" AutoGenerateColumns="false" CssClass="gridtable" DataKeyNames="LocationId">
    <Columns>
        <asp:BoundField HeaderText="Location Name" DataField="LocationName" />
        <asp:TemplateField HeaderText="Amount">
            <ItemTemplate>
                <asp:TextBox ID="txtAmount" runat="server" CssClass="txtbox" Visible="true"></asp:TextBox>
                <asp:RequiredFieldValidator ID="rfvAmount" runat="server" ControlToValidate="txtAmount" ErrorMessage="Please enter the Amount" Display="Dynamic" SetFocusOnError="true" ValidationGroup="save"></asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="rgvAmount" runat="server" ControlToValidate="txtAmount" ValidationExpression="^\d+$" ErrorMessage="Please enter whole numbers only" Display="Dynamic" SetFocusOnError="true" ValidationGroup="save"></asp:RegularExpressionValidator>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


<asp:Button ID="btnLocationAmountList" runat="server" OnClick="btnLocationAmountList_Click" Text="Save" Width ="100px" ValidationGroup="save" />
相关问题