2014-03-19 50 views
0

我有一个基本的应用程序,其中包含一个sqldatasource gridview。数据源包含两个日期参数。参数链接到两个预填充的文本框,但可以由用户修改其期望的日期范围。每个文本框上有两个验证控件。 requiredfieldvalidator和comparefieldvalidator。后者是对有效日期格式的检查。当我(故意)中断其中一个日期时,比如说,通过添加一封信例如19/03/2014a(我在英国,日期格式是dd/mm/yy)它会返回一条消息来表示日期无效。asp.net验证导致gridview问题selectedindexchanged

问题:

现在,在这一点上,如果我立即选择在GridView上一排,应用出轨,我得到一个错误:“转换失败时从字符串转换日期时间”这给预计我我使用文本框中的日期作为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

Removed必填字段验证程序,并使用正则表达式验证程序,您可以在其中指定日期的正则表达式并根据它对页面进行验证。

由于文本框有值,但它没有检查文本框是否具有有效日期,所以现在需要使用所需的字段验证程序,因为它没有启动验证。

Regex to validate date format dd/mm/yyyy

+0

我会尝试你的建议,但是,不会我有CompareValidator采取日期验证的护理: 的 SQLGolfer

+1

不要比较验证器需要有效的日期比较,这就是为什么它不会工作 –

+0

对不起,你的回答没有帮助。 – SQLGolfer