DataGridView中加ComboBox

 
  ' 打开窗体代码窗口,在代码窗口中声明一个ComboBox的控件
     ' // 定义下拉列表框
     Private  cmb_Temp  As   New  ComboBox



    
Private   Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      
 ' 绑定性别下拉列表框
        BindSex()

        
'绑定数据表
        BindData()

        
' 设置下拉列表框不可见
        cmb_Temp.Visible = False

        
' 添加下拉列表框事件
        AddHandler cmb_Temp.SelectedIndexChanged, AddressOf cmb_Temp_SelectedIndexChanged


        
' 将下拉列表框加入到DataGridView控件中
        Me.dgv_User.Controls.Add(cmb_Temp)

    
End Sub



    
Public   Sub BindSex()

        
Dim dtSex As New DataTable
        dtSex.Columns.Add(
"Value")
        dtSex.Columns.Add(
"Name")
        
Dim drSex As DataRow
        drSex 
= dtSex.NewRow()
        drSex(
"Value"= "0"
        drSex(
"Name"= ""
        dtSex.Rows.Add(drSex)
        drSex 
= dtSex.NewRow()
        drSex(
"Value"= "1"
        drSex(
"Name"= ""
        dtSex.Rows.Add(drSex)
        cmb_Temp.ValueMember 
= "Value"
        cmb_Temp.DisplayMember 
= "Name"
        cmb_Temp.DataSource 
= dtSex
        cmb_Temp.DropDownStyle 
= ComboBoxStyle.DropDownList

    
End Sub


    
' 通常情况下我们都是从数据库中获取数据表(或者数据集),然后绑定到DataGridView中的,这里我们为了避免连接数据库,手中构造一个数据库表,代码如下:
     Private   Sub BindData()

        
Dim dtData As New DataTable
        dtData.Columns.Add(
"ID")
        dtData.Columns.Add(
"Name")
        dtData.Columns.Add(
"Sex")
        
Dim drData As DataRow
        drData 
= dtData.NewRow()
        drData(
"ID"= 1
        drData(
"Name"= "张三"
        drData(
"Sex"= "1"
        dtData.Rows.Add(drData)
        drData 
= dtData.NewRow()
        drData(
"ID"= 2
        drData(
"Name"= "李四"
        drData(
"Sex"= "1"
        dtData.Rows.Add(drData)
        drData 
= dtData.NewRow()
        drData(
"ID"= 3
        drData(
"Name"= "王五"
        drData(
"Sex"= "1"
        dtData.Rows.Add(drData)
        drData 
= dtData.NewRow()
        drData(
"ID"= 4
        drData(
"Name"= "小芳"
        drData(
"Sex"= "0"
        dtData.Rows.Add(drData)
        drData 
= dtData.NewRow()
        drData(
"ID"= 5
        drData(
"Name"= "小娟"
        drData(
"Sex"= "0"
        dtData.Rows.Add(drData)
        drData 
= dtData.NewRow()
        drData(
"ID"= 6
        drData(
"Name"= "赵六"
        drData(
"Sex"= "1"
        dtData.Rows.Add(drData)
       

        dgv_User.DataSource 
= Nothing

      
Me.dgv_User.DataSource = dtData

    
End Sub




    
' 当用户选择的单元格移动到性别这一列时,我们要显示下拉列表框,添加如下事件
     Private   Sub dgv_User_CurrentCellChanged(ByVal sender As ObjectByVal e As System.EventArgs) Handles dgv_User.CurrentCellChanged
        
Try

            
If Not Me.dgv_User.CurrentCell Is Nothing AndAlso Me.dgv_User.CurrentCell.ColumnIndex = 2 Then

                
Dim rect As Rectangle = dgv_User.GetCellDisplayRectangle(dgv_User.CurrentCell.ColumnIndex, dgv_User.CurrentCell.RowIndex, False)
                
Dim sexValue As String = dgv_User.CurrentCell.Value.ToString()
                
If sexValue = "" Then
                    cmb_Temp.Text 
= ""
                    cmb_Temp.Left 
= rect.Left
                    cmb_Temp.Top 
= rect.Top
                    cmb_Temp.Width 
= rect.Width
                    cmb_Temp.Height 
= rect.Height
                    cmb_Temp.Visible 
= True
                
Else
                    cmb_Temp.Text 
= ""
                    cmb_Temp.Left 
= rect.Left
                    cmb_Temp.Top 
= rect.Top
                    cmb_Temp.Width 
= rect.Width
                    cmb_Temp.Height 
= rect.Height
                    cmb_Temp.Visible 
= True
                
End If
            
Else

                cmb_Temp.Visible 
= False

            
End If
        
Catch ex As Exception

        
End Try

    
End Sub


    
' 当用户选择下拉列表框时改变DataGridView单元格的内容
     Private   Sub cmb_Temp_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)


        
If CType(sender, ComboBox).Text = "" Then

            dgv_User.CurrentCell.Value 
= ""
            dgv_User.CurrentCell.Tag 
= "0"

        
Else

            dgv_User.CurrentCell.Value 
= ""
            dgv_User.CurrentCell.Tag 
= "1"
        
End If

    
End Sub


    
' 当滚动DataGridView或者改变DataGridView列宽时将下拉列表框设为不可见()

    
Private   Sub dgv_User_Scroll(ByVal sender As ObjectByVal e As System.Windows.Forms.ScrollEventArgs) Handles dgv_User.Scroll
        
Me.cmb_Temp.Visible = False
    
End Sub


    
Private   Sub dgv_User_ColumnWidthChanged(ByVal sender As ObjectByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles dgv_User.ColumnWidthChanged
        
Me.cmb_Temp.Visible = False
    
End Sub


    
' 绑定数据表后将性别列中的每一单元格的Value和Tag属性(Tag为值文本, Value为显示文本)

    
Private   Sub dgv_User_DataBindingComplete(ByVal sender As ObjectByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles dgv_User.DataBindingComplete
        
Try
            
For i As Integer = 0 To Me.dgv_User.Rows.Count - 1
                
If (Not dgv_User.Rows(i).Cells(2).Value Is NothingAndAlso dgv_User.Rows(i).Cells(2).ColumnIndex = 2 Then

                    dgv_User.Rows(i).Cells(
2).Tag = dgv_User.Rows(i).Cells(2).Value.ToString()
                    
If dgv_User.Rows(i).Cells(2).Value.ToString() = "0" Then

                        dgv_User.Rows(i).Cells(
2).Value = ""

                    
ElseIf dgv_User.Rows(i).Cells(2).Value.ToString() = "1" Then

                        dgv_User.Rows(i).Cells(
2).Value = ""

                    
End If
                
End If
            
Next
        
Catch ex As Exception

        
End Try

    
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值