2014-03-19 47 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