我有一个基本的应用程序,其中包含一个sqldatasource的gridview。数据源包括两个日期参数。参数链接到两个预先填充的文本框,但可以由用户修改它们所需的日期范围。我在每个文本框上都有两个验证控件。 requiredfieldvalidator和comparefieldvalidator。后者是对有效日期格式的检查。
当我(故意)打破其中一个日期时,例如,通过添加一个字母,例如19/03 / 2014a(我在英国,日期格式是dd / mm / yy),验证完全开始了返回一条消息,说明日期无效。
问题:
现在,如果我立即在gridview上选择一行,应用程序会脱轨并出现错误:“从字符串转换datetime时转换失败”这是预期的,因为我使用文本框中的日期作为我的gridview数据源的参数现在包含一个无效的日期。为了阻止SelectedIndexChanged触发,我试图处理gridview的SelectedIndexChanging事件并取消行选择。这是代码:
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
Page.Validate();
if (!Page.IsValid)
{
e.Cancel = true;
return;
}
}
此代码“有效”,因为它阻止了SelectedIndexChanged事件以及gridview数据绑定,但是,我仍然得到相同的错误:“从字符串转换日期时转换失败”。
有人可以帮助我吗?
一如既往的帮助!
亲切的问候
保罗。
编辑:我尝试了正则表达式的建议。我删除了其他验证器(必需和比较)出现相同的错误。没有变化。我不明白的是,当我在“GridView1_SelectedIndexChanging”中取消gridview选择的索引更改事件并且“GridView1_SelectedIndexChanged”没有触发时,我希望该页面将保持不变。但它完全脱轨并引发错误。为什么?!我取消了这个动作!
当我逐步输入输入无效日期的代码时,我可以看到gridview没有在那里进行数据绑定。是否可能尝试使用DataBind()?
非常感谢!
问候 保罗
编辑:我终于解决了这个问题。我禁用了自动数据绑定,并在适当的时候自己调用了DataBind()。我想到的另一个措施是在T-SQL中添加验证登录,以便无效日期不会导致查询数据库。可能有更好的解决方案,但我找不到它,没有人建议。答案 0 :(得分:0)
删除必填字段验证器并使用正则表达式验证器,您可以在其中指定日期的正则表达式并对其进行验证页面。
现在使用必填字段验证程序,因为文本框有值但不检查文本框是否有效日期,因此它不会触发验证。