2009-11-13 57 views
0

我有一個datagridview似乎工作正常,直到用戶將名稱添加到已存在的唯一名稱列中。Vb.Net Datagridview錯誤處理

我得到這個:

System.Data.ConstraintException:列 '名稱' 約束是唯一的。價值'測試'已經存在。

任何暗示我在哪裏以及如何捕獲此錯誤並阻止用戶添加其他名稱(不區分大小寫)以防止出現這種巨大錯誤?

謝謝!

+0

我做到這一點,它解決了我的問題: 私人小組dgv_DataError(BYVAL發件人爲對象,BYVALË作爲System.Windows.Forms.DataGridViewDataErrorEventArgs)處理dgv.DataError \t MSGBOX(e.Exception.Message) 結束Sub – ErocM 2009-11-13 21:04:50

+0

呃...格式不好。對於那些想知道的人,我在datagridview1.DataError中發現了錯誤。儘管如此,你還是不要試一試。我在e.exception中顯示了該事件中的消息。 – ErocM 2009-11-13 21:07:00

回答

0

查看您的數據源的OnSelected事件,具體爲ExceptionExceptionHandled屬性的事件參數。

+0

我不確定我完全掌握了這一點。我正在創建一個數據表作爲源,我手動填充。我將如何到達OnSelected事件? – ErocM 2009-11-13 20:21:14

+0

別擔心:我在想asp.net,但DataGridView是一個winforms控件。所以這並不適用於你。我會留下它而不是刪除它,以幫助其他人避免相同的錯誤。 – 2009-11-13 20:31:13

1

只需在代碼中捕獲ConstraintException類型的異常(確保它在執行插入的位置附近)。如果發現該異常,則顯示一些友好的文字「The name'test'already exists,Please choose another name。」

+0

你能告訴我我正在捕獲什麼事件嗎? – ErocM 2009-11-13 20:35:09

0

您可以簡單地處理CellValidating事件並檢查是否存在具有相同名稱的項目。如果存在,請將e.Cancel設置爲True,並在該行上設置錯誤消息。例如:

Private Sub dataGridView1_CellValidating(ByVal sender As Object, _ 
             ByVal e As DataGridViewCellValidatingEventArgs) _ 
             Handles dataGridView1.CellValidating 

    If ExistsItemWithName(e.FormattedValue.ToString) Then 
     e.Cancel = True 
     Me.dataGridView1.Rows(e.RowIndex).ErrorText = "An item with this name already exists" 
    End If 

末次

請注意,如果您設置CellValidating的ErrorText,你也應該處理CellValidating設置回ErrorTextString.Empty