DataGridView中Combobox的数据类型匹配

DataGridView中Combobox的数据类型匹配

假如Combobox中设置的时候的数据类型时int32,DataGridView显示是匹配的数据是double型的,显示时就会报错。

解决方法:

1。匹配时作判断(MaxID是要匹配的数据,默认是int32)

                If dgvMaster.Rows(0).Cells(0).Value.GetType.Name = "Double" Then
                    dgvMaster.Rows.Add(CType(MaxID, Double), "")
                    dgvMaster.Rows(dgvMaster.Rows.Count - 1).Cells(j).Value = CType(MaxOrder, Double)
                ElseIf dgvMaster.Rows(0).Cells(0).Value.GetType.Name = "Short" Then
                    dgvMaster.Rows.Add(CType(MaxID, Short), "")
                    dgvMaster.Rows(dgvMaster.Rows.Count - 1).Cells(j).Value = CType(MaxOrder, Short)
                Else
                    dgvMaster.Rows.Add(MaxID, "")
                    dgvMaster.Rows(dgvMaster.Rows.Count - 1).Cells(j).Value = MaxOrder
                End If 

 

2。根据要匹配的数据类型进行设置

Call SetGridComboBoxEx(dgv_3, "SELECT CAST(COD AS NUMBER(3,0)) AS COD,NAM FROM MZZT001 WHERE KBN = 'X0162' ORDER BY DSP_SEQ", "COD", "NAM", "方向", "System.Int16")

 

 

dgvContainer :DataGridView名字

strSQL :Combobox中设置数据的查询

strValueMember :sql查询中,最为数据的字段

strDispMember :sql查询中,最为显示的字段

strColumnName :DataGridView中,显示为Combobox的列

strType :要设置的数据类型

Public Shared Function SetGridComboBoxEx(ByVal dgvContainer As Windows.Forms.DataGridView, ByVal strSQL As String, ByVal strValueMember As String, ByVal strDispMember As String, ByVal strColumnName As String, ByVal strType As String) As Boolean
        Dim tblDataSource As DataTable
        Dim dgcmb As New Windows.Forms.DataGridViewComboBoxColumn
        Dim bFlag As Boolean = False
        Try
            '取得列的Combobox对象
            For i As Integer = 0 To dgvContainer.Columns.Count - 1
                If dgvContainer.Columns(i).HeaderText = strColumnName Then
                    dgcmb = dgvContainer.Columns(i)
                    bFlag = True
                    Exit For
                End If
            Next

            If bFlag = False Then
                Return False
            End If

            tblDataSource = clsDBBase.dataTable(strSQL)

            If tblDataSource Is Nothing Then
                tblDataSource = New DataTable
                tblDataSource.Columns.Add(strValueMember, System.Type.GetType(strType))
                tblDataSource.Columns.Add(strDispMember)
            End If
            tblDataSource.Rows.InsertAt(tblDataSource.NewRow(), 0)
            tblDataSource.Rows(0).Item(strValueMember) = 0
            tblDataSource.Rows(0).Item(strDispMember) = DBNull.Value

            '数据绑定
            dgcmb.DisplayMember = strDispMember
            dgcmb.ValueMember = strValueMember
            dgcmb.DataSource = tblDataSource
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function

 

 

3。CellParsing事件(假设应该是Double型)

Private Sub dgvMaster_CellParsing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellParsingEventArgs) Handles dgvMaster.CellParsing
        Try
            If (e.Value Is Nothing) Or (e.Value Is DBNull.Value) Or (e.Value = "") Then
                    e.Value = Convert.ToDouble("0")
                Else
                    e.Value = Convert.ToDouble(e.Value)
                End If
                e.ParsingApplied = True
            End If
        Catch ex As Exception
             End Try
    End Sub

 

4。DataError事件(适用于原来有此combobox选项,后来被删除了,但是,以前的数据中,combobox可能还有此选项纪录遗留)

Private Sub dgvMaster_CellValidating(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvMaster.CellValidating
        Dim dgvTem As DataGridView = sender
        Try
            dgvTem.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = ""
        Catch ex As Exception
        End Try
    End Sub

 

Private Sub DataGridView_DataError(ByVal sender As System.Object, _
            ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles dgvMaster.DataError
        Try
            Call DataGridViewComboBoxCellDataErrorHandler(sender, e)
        Catch ex As Exception
        End Try
    End Sub

 

Public Shared Sub DataGridViewComboBoxCellDataErrorHandler(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs)
        Try
            Dim lDgv As Windows.Forms.DataGridView = sender
            If lDgv.Columns(e.ColumnIndex).CellType.Name = "DataGridViewComboBoxCell" Then
                If lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).ValueType.Equals(Type.GetType("System.String")) Then
                    If IsNumeric(lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString) Then
                        lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = CInt(lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString)
                    End If
                Else
                    lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString
                End If
                lDgv.Rows(e.RowIndex).Cells(e.ColumnIndex).ErrorText = "此项已删除"
            Else
                e.ThrowException = True
            End If
        Catch ex As Exception
        End Try
    End Sub

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值