添加一个下拉框到DataGrid

form1.vb
Imports System.Data.SqlClient

Public Class Form1

    
Public MyCombo As New ComboBox()

    
Dim con As New SqlConnection("server=GUOXH\SQLEXPRESS;uid=sa;pwd=1234567;database=northwind")

    
Dim daEmp As New SqlDataAdapter("Select * From Employees", con)



    
Public ds As New DataSet()


    
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        
AddHandler MyCombo.TextChanged, AddressOf Ctrls_TextChanged
        
'Fill ComboBox list.

        MyCombo.Name 
= "MyCombo"

        MyCombo.Visible 
= False

        MyCombo.Items.Clear()

        MyCombo.Items.Add(
"Sales Representative")

        MyCombo.Items.Add(
"Inside Sales Coordinator")

        MyCombo.Items.Add(
"Vice President, Sales")

        MyCombo.Items.Add(
"Sales Manager")

        MyCombo.Items.Add(
"Flunky")





        daEmp.Fill(ds, 
"Employees")



        
'Set the RowHeight of the DataGrid to the height of the ComboBox.

        DataGrid1.PreferredRowHeight 
= MyCombo.Height



        DataGrid1.DataSource 
= ds



        DataGrid1.DataMember 
= "Employees"

        
'Add ComboBox to the Control collection of the DataGrid.

        DataGrid1.Controls.Add(MyCombo)
    
End Sub


    
Private Sub DataGrid1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint
        
If DataGrid1.CurrentCell.ColumnNumber = 3 Then

            MyCombo.Width 
= DataGrid1.GetCurrentCellBounds.Width

        
End If
    
End Sub


    
Private Sub Ctrls_TextChanged(ByVal sender As ObjectByVal e As System.EventArgs)

        
If DataGrid1.CurrentCell.ColumnNumber = 3 Then

            MyCombo.Visible 
= False

            
If DataGrid1.Item(DataGrid1.CurrentCell) & "" = "" Then

                SendKeys.Send(
"*")

            
End If

            DataGrid1.Item(DataGrid1.CurrentCell) 
= MyCombo.Text

        
End If

    
End Sub


    
Private Sub DataGrid1_CurrentCellChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
        
If DataGrid1.CurrentCell.ColumnNumber = 3 Then

            MyCombo.Visible 
= False

            MyCombo.Width 
= 0

            MyCombo.Left 
= DataGrid1.GetCurrentCellBounds.Left

            MyCombo.Top 
= DataGrid1.GetCurrentCellBounds.Top

            MyCombo.Text 
= DataGrid1.Item(DataGrid1.CurrentCell) & ""

            MyCombo.Visible 
= True

        
Else

            MyCombo.Visible 
= False

            MyCombo.Width 
= 0

        
End If

    
End Sub


    
Private Sub DataGrid1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll
        MyCombo.Visible 
= False

        MyCombo.Width 
= 0

    
End Sub


    
Private Sub DataGrid1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
        MyCombo.Visible 
= False

        MyCombo.Width 
= 0

    
End Sub

End Class

Form1.Designer.vb
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial 
Class Form1
    
Inherits System.Windows.Forms.Form

    
'Form 重写 Dispose,以清理组件列表。
    <System.Diagnostics.DebuggerNonUserCode()> _
    
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
        
If disposing AndAlso components IsNot Nothing Then
            components.Dispose()
        
End If
        
MyBase.Dispose(disposing)
    
End Sub


    
'Windows 窗体设计器所必需的
    Private components As System.ComponentModel.IContainer

    
'注意: 以下过程是 Windows 窗体设计器所必需的
    '可以使用 Windows 窗体设计器修改它。
    '不要使用代码编辑器修改它。
    <System.Diagnostics.DebuggerStepThrough()> _
    
Private Sub InitializeComponent()
        
Me.DataGrid1 = New System.Windows.Forms.DataGrid
        
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).BeginInit()
        
Me.SuspendLayout()
        
'
        'DataGrid1
        '
        Me.DataGrid1.DataMember = ""
        
Me.DataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText
        
Me.DataGrid1.Location = New System.Drawing.Point(1212)
        
Me.DataGrid1.Name = "DataGrid1"
        
Me.DataGrid1.Size = New System.Drawing.Size(659435)
        
Me.DataGrid1.TabIndex = 0
        
'
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        
Me.ClientSize = New System.Drawing.Size(683482)
        
Me.Controls.Add(Me.DataGrid1)
        
Me.Name = "Form1"
        
Me.Text = "Form1"
        
CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit()
        
Me.ResumeLayout(False)

    
End Sub

    
Friend WithEvents DataGrid1 As System.Windows.Forms.DataGrid

End Class

原文地址:https://www.cnblogs.com/gxh973121/p/442208.html