台灣最大程式設計社群網站
線上人數
5891
 
會員總數:246136
討論主題:189720
歡迎您免費加入會員
討論區列表 >> VB.NET >> 請問在DataGridView的日期欄位,輸入錯誤日期時,可以套用別的值嗎?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問在DataGridView的日期欄位,輸入錯誤日期時,可以套用別的值嗎?
價值 : 100 QP  點閱數:651 回應數:13
樓主

danny
門外漢
0 31
859 74
發送站內信

環境: Win7 + VS2017 + .Net FrameWork4.0
日期是採用民國日期

當我於 DataGridView1 的"日期"欄位,輸入錯誤日期時(例如: 1080602),會發生錯誤警告

請問我可以攔截錯誤嗎,並將 1080602 先轉換成日期格式 108/06/02,再更改 DataGridView1.CurrentCell.Value 的值嗎?

我試著在 CellValueChanged , CellValidating 內設定

DataGridView1.CurrentCell.Value = Date.Now() 'StrToDate(e.FormattedValue)

都失敗,請問該怎麼做?

搜尋相關Tags的文章: [ DataGridView ] , [ 日期 ] , [ CellValueChanged ] , [ CellValidating ] ,
本篇文章發表於2019-06-02 10:53
1樓
回應

roar
檢舉此回應
如果是因為使用textbox輸入容易造成錯誤,可以使用DateTimePicker在需要日期輸入的地方。這樣就不用檢查格式了。
本篇文章回覆於2019-06-02 14:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

danny
檢舉此回應
謝謝 roar 的建議

不過我還是想了解檢查格式的做法 ?
本篇文章回覆於2019-06-02 15:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

HB
檢舉此回應
試試isdate指令!

本篇文章回覆於2019-06-02 16:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

danny
檢舉此回應
謝謝 HB

請問如果檢查錯誤之後,我要如何轉換成其他日期值

我在 DataGridView1.CellValidating 內設定

DataGridView1.CurrentCell.Value = Date.Now() 'StrToDate(e.FormattedValue)

好像不行
本篇文章回覆於2019-06-02 18:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

roar
檢舉此回應
在Form1_Load 加入下列看看,注意MM一定要大寫。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
DataGridView1.Columns(0).DefaultCellStyle.Format = "yyyy/MM/dd"
End Sub
本篇文章回覆於2019-06-02 19:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

HB
檢舉此回應
看看是否符合所需?

本篇文章回覆於2019-06-02 19:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

danny
檢舉此回應
謝謝

最後若沒有辦法時,只好硬性設定 DataGridView1.Columns(0).DefaultCellStyle.Format = "yyyy/MM/dd"

底下的測試程式:

1.當我於第2列輸入日期: 2019/06/03 ....(沒問題)

2.但是當我輸入日期: 20190603 ....(會發生錯誤,我是希望能先攔截到錯誤,並將該日期改成今天或其他值,避免卡住)
但是測試都失敗


本篇文章回覆於2019-06-03 10:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

HB
檢舉此回應
To Danny

沒有觸發此行:DataGridView1.CurrentCell.Value = Now.ToString("yyyy-MM-dd") '當輸入錯誤時,好像都沒有執行到此列

主要是與DataGridView1觸發事件有關,提供的範例,其觸發事件CellValueChanged,因此要點下Cell會發生。
所以,要在何時Check日期,需要看看要觸發哪一個事件!
本篇文章回覆於2019-06-03 12:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

danny
檢舉此回應
請問

可以在那一個事件處理 ?
本篇文章回覆於2019-06-03 14:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
最有價值解答

P陳
檢舉此回應
個人建議:
1.不要給任何條件(設定 只能打數字 或 "/"
2.當使用者打完後 20190501 1080603 10863 ...... 並按下 Enter 後

3.會觸發 CellValueChanged 然後再其中判斷即可
-------------------------
目前的我就是這樣作 因為還有一個農曆問題 如 108 年 沒有 2/29,但農曆會有 108/2/29,要自動判斷是不可能的
所以自已寫判斷式最保險 (我用 文字形態來放)


本篇文章回覆於2019-06-03 16:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

小魚
檢舉此回應
一般不會判斷到農曆吧,
農曆真的只能自己想辦法處理了...
本篇文章回覆於2019-06-03 17:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
不錯的參考

HB
檢舉此回應
7F所附的程式第4行:dt.Columns.Add("Date", Type.GetType("System.DateTime")) 已經更改Field Type定義為Date,所以輸入若非日期資料,便會出錯。

若要解決7F第2問題,須把Field Type改為String型別,才能接受文字,再利用此語法If Not IsDate(_Date) Then 判別。

至於要使用哪一個Event,要看使用時機,只能多多Google or Try and error了!
本篇文章回覆於2019-06-03 19:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
作者回應

danny
檢舉此回應
找到了,可以從 DataGridView1.DataError() 判斷處理,謝謝各位


本篇文章回覆於2019-06-03 22:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.