我有一个包含多行(记录)的GridView。
<asp:DropDownList ID="DDLActionStatus" runat="server" DataSourceID="LDSActionStatus" AppendDataBoundItems="True" DataTextField="Title" DataValueField="ReportActionStatusID" SelectedValue='<%# Bind("ReportActionStatusID") %>' Enabled='<%# (int)Eval("ReportActionStatusID") == 1 %>' Width="100%" />
<asp:Button ID="BtnActionStatus" runat="server" CommandName="Update" Text="Save & Close" OnClientClick="return confirm('Are you sure? Once set, this can not be changed.')" Width="100%" />
<asp:CompareValidator ID="CVActionStatus" runat="server" Operator="NotEqual" ValueToCompare="1" Type="Integer" ControlToValidate="DDLActionStatus" SetFocusOnError="true" ErrorMessage="Must set one of the Completion statuses" />
它适用于一行,但是如果有多行,它会一起验证所有行。
我理解这是因为ControlToValidate="DDLActionStatus"
每行重复一次。
我尝试将ID设置为ID="DDLActionStatus<%# Eval('ReportActionStatusID') %>"
和ControlToValidate="DDLActionStatus<%# Eval('ReportActionStatusID') %>"
,但它不起作用。
我知道我可以编写自定义验证,但有一个简单的解决方案,不需要自定义验证吗?
我需要的是每一行都是独立验证的。
感谢您的帮助。
答案 0 :(得分:2)
问题不在于ControlToValidate
属性。向具有相同值的行中的每个控件添加ValidationGroup
属性。但是,请确保为GridView中的所有行保持唯一。请参阅以下示例。
<asp:DropDownList ID="DDLActionStatus" runat="server" ValidationGroup="MyGroup1" DataSourceID="LDSActionStatus" AppendDataBoundItems="True" DataTextField="Title" DataValueField="ReportActionStatusID" SelectedValue='<%# Bind("ReportActionStatusID") %>' Enabled='<%# (int)Eval("ReportActionStatusID") == 1 %>' Width="100%" />
<asp:Button ID="BtnActionStatus" runat="server" ValidationGroup="MyGroup1" CommandName="Update" Text="Save & Close" OnClientClick="return confirm('Are you sure? Once set, this can not be changed.')" Width="100%" />
<asp:CompareValidator ID="CVActionStatus" runat="server" ValidationGroup="MyGroup1" Operator="NotEqual" ValueToCompare="1" Type="Integer" ControlToValidate="DDLActionStatus" SetFocusOnError="true" ErrorMessage="Must set one of the Completion statuses" />
确保每行的ValidationGroup
不同。
一切顺利!