我希望能够将Arguments传递给服务器端CustomValidator。
我想要这个,因为我要验证的控件位于网格的编辑字段中。
代码:
<telerik:GridTemplateColumn DataField="numbercancelled" DataType="System.Int32" FilterControlAltText="Filter numbercancelled column"
HeaderText="numbercancelled" SortExpression="Numbercancelled" UniqueName="numbercancelled">
<ItemTemplate>
<asp:Label runat="server" ID="lblNumbercancelled" Text='<%# Eval("numbercancelled") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox runat="server" ID="tbNumbercancelled" Text='<%# Bind("numbercancelled") %>'
MaxLength="10">
</asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="This is a required field"
ControlToValidate="tbNumbercancelled" Display="Dynamic"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="Please enter a number higher than 0"
ValidationExpression="^(0|[1-9][0-9]*)$" ControlToValidate="tbNumbercancelled"
Display="Dynamic"></asp:RegularExpressionValidator>
<asp:CustomValidator ID="NumberCancelledValidator"
runat="server" ErrorMessage="CustomValidator" ControlToValidate="tbNumbercancelled"
OnServerValidate="NumberCancelledValidator_ServerValidate"
></asp:CustomValidator>
</EditItemTemplate>
</telerik:GridTemplateColumn>
我想传递当前正在编辑的行的ID,因为它的验证方式取决于您正在编辑的行。
最后我想出了这个:
CustomValidator cvalid = (CustomValidator)source;
GridEditFormItem gv = (GridEditFormItem)cvalid.NamingContainer;
int ItemIndex = ((GridEditFormItem)gv.EditFormCell.NamingContainer).ItemIndex;
var grid = InkoopDetailGridEdit;
int ID = int.Parse(((Label)((GridDataItem)grid.Items[ItemIndex]).Cells[0].FindControl("ID")).Text);
答案 0 :(得分:2)
您可以使用以下示例获取行索引:
CustomValidator cvalid = (CustomValidator)source;
GridViewRow gv = cvalid.NamingContainer;
int index = gv.RowIndex;