2009-11-13 104 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