none
如何处理CellFormatting事件? RRS feed

  • 问题

  • 我想在datagridview中显示enum值,对应的数值绑定与来源数据库的integer字段,通过CellFormatting和CellParsing两个事件转换数据类型
    Public Enum Test
            A
            B
            C
     End Enum

     Private Sub DataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView.CellFormatting
            Select Case CType(sender, DataGridView).Columns(e.ColumnIndex).Name
                Case "TestEnum"
                    e.Value = [Enum].GetName(GetType(Test), CType(e.Value, Integer))
            End Select
        End Sub

        Private Sub DataGridView_CellParsing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles DataGridView.CellParsing
            Select Case CType(sender, DataGridView).Columns(e.ColumnIndex).Name
                Case "TestEnum"
                    e.Value = CType([Enum].Parse(GetType(AdmissionState), e.Value.ToString), Integer)
            End Select
        End Sub

    如果从数据库读的时候,程序运行没问题,但是如果我在单元格输入文本内容,CellFormatting过程就会抛出Sting不能转换成Integer引起异常。我仔细研究了下,不单只从数据源读取数据的时候触发CellFormatting事件,在向单元格完成输入内容,输入数据从datagridvieweditingcontrol回传给datagridview时也会触发CellFormatting事件,而且两次事件传入和传出e.value的数据类型是相反的,所以当我在单元格输入文本时,CellFormatting事件处理程序试图把传入的字符串转成整数而抛出异常,如果我输入的是纯数字的字符,就能成功转换。
    我现在的问题是:在CellFormatting事件处理程序内我如何才能判断CellFormatting是由那种情况触发的从而捕捉到这个异常。我看了下e参数所有的参数都不能判断这种情况,请各位高手指教,谢谢。

    2010年1月12日 18:17

答案

  •  Private Sub DataGridView_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles DataGridView.CellFormatting
            Select Case CType(sender, DataGridView).Columns(e.ColumnIndex).Name
                Case "TestEnum"
                    if not Array.IndexOf([Enum].GetNames(GetType(Test)), e.Value)>=0 then
                         e.Value = [Enum].GetName(GetType(Test), CType(e.Value, Integer))
                    end if
            End Select
        End Sub
    http://feiyun0112.cnblogs.com/
    2010年1月13日 1:27
    版主