I have a required field validator in a Gridview. I want fire the validater only if the ddlPartsStatus is "Ordered". I just can't get it to work.
At the moment required field validator fires for all the textboxes.
my code
<asp:GridView ID="gvPartsToOrderDetail" CssClass="gvPartsToOrderDetail" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvPartsToOrderDetail_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Ticket Number">
<ItemTemplate>
<asp:TextBox ID="txtTicketNo" Text='<%# Eval("TicketNo") %>' runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rfvTxtTicketNo" runat="server" ForeColor="Red" Font-Bold="true" Font-Size="Medium" ErrorMessage="*" ControlToValidate="txtTicketNo" ValidationGroup="Submit"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Parts Status">
<ItemTemplate>
<asp:DropDownList ID="ddlPartStatus" runat="server" AutoPostBack="true">
<asp:ListItem Value="0" Text="-Select-"></asp:ListItem>
<asp:ListItem Value="1" Text="Ordered"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnSubmit" CssClass="btnSubmit" runat="server" Text="Submit" ValidationGroup="Submit" OnClick="btnSubmit_Click" />
Any help is greatly appreciated. Thanks
For this you need a CustomValidator
. Then the ClientValidationFunction
should evaluate both the TextBox and the DropDownList.
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="*"
ValidationGroup="Submit" ControlToValidate="txtTicketNo"
ClientValidationFunction="checkValuesInRow" ValidateEmptyText="true"></asp:CustomValidator>
<script type="text/javascript">
function checkValuesInRow(sender, element) {
var isValid = false;
var ddlValue = $("#" + sender.controltovalidate).closest('tr').find('select').val();
if (element.Value === "" && ddlValue === "0") {
isValid = true;
}
element.IsValid = isValid;
}
</script>