验证具有数据库值的模板文本框

时间:2013-04-18 09:57:55

标签: asp.net validation gridview templatefield

我正在开发一个网站,并在gridview模板字段中有一个文本框。此文本框收集“订单数量”的输入,必须与“可用数量”(存储在数据库中)进行比较。

我在gridview中使用RowEditing,RowUpdating和RowCanceling事件进行编辑操作。

我尝试使用“TextChanged”事件的文本框实现上述要求。但问题是,当用户编辑数量并点击“更新”按钮时,文本框事件将首先触发,更新按钮事件不会触发。因此,用户被迫再次点击“更新”按钮。

上述方案或用于实现上述要求的任何其他事件是否有任何解决方法?

谢谢, 巴拉吉克

2 个答案:

答案 0 :(得分:0)

你可以使用RangeValidator ......

    <asp:RangeValidator ID="RangeValidator1" ControlToValidate="YourTexBoxId" 
runat="server" MinimumValue="0" Type="Integer"
MaximumValue='<%# GetQuantity(Eval(TotalQaunt).ToString(),Eval(ItemId).ToString()) %>'
 ErrorMessage="RangeValidator"></asp:RangeValidator>

写一个函数lyk this ON CODE BEHIND

string GetQuantity(string totalquantity,string itemid)
{
DO OPERATRION TO GET QUANTITY.....
return quantity;
}

答案 1 :(得分:0)

我想我会尝试使用CustomValidator。使用CustomValidator,您可以在“_ServerValidate”事件处理程序中定义验证代码。

在验证代码中,您可以调用数据库以获取当前值,然后将其与提交的值进行比较(如果指定ControlToValidate,则可通过事件处理程序的ServerValidateEventArgs参数进行比较)。

要查找数据库中的当前值,您需要知道单击了哪条记录。为此,您可以使用行按钮的CommandArgument属性,也可以在行中包含一个隐藏字段来存储某种类型的ID。然后,您可以捕获该ID并使用它在数据库中查找所需的记录。

已更新为代码

Protected Sub cusCustom_ServerValidate(source As Object, args As System.Web.UI.WebControls.ServerValidateEventArgs)
    Dim cv As CustomValidator = CType(source, CustomValidator)
    Dim HiddenField_ID As HiddenField = CType(cv.Parent.FindControl("HiddenField_ID"), HiddenField)
    *** Use ID to look up value in database ***
End Sub