Imports System.Data.SqlClient PublicClass Form1Class Form1 Public MyCombo AsNew ComboBox() Dim con AsNew SqlConnection("server=GUOXH\SQLEXPRESS;uid=sa;pwd=1234567;database=northwind") Dim daEmp AsNew SqlDataAdapter("Select * From Employees", con) Public ds AsNew DataSet() PrivateSub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.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 PrivateSub DataGrid1_Paint()Sub DataGrid1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint If DataGrid1.CurrentCell.ColumnNumber =3Then MyCombo.Width = DataGrid1.GetCurrentCellBounds.Width EndIf End Sub PrivateSub Ctrls_TextChanged()Sub Ctrls_TextChanged(ByVal sender AsObject, ByVal e As System.EventArgs) If DataGrid1.CurrentCell.ColumnNumber =3Then MyCombo.Visible =False If DataGrid1.Item(DataGrid1.CurrentCell) &""=""Then SendKeys.Send("*") EndIf DataGrid1.Item(DataGrid1.CurrentCell) = MyCombo.Text EndIf End Sub PrivateSub DataGrid1_CurrentCellChanged()Sub DataGrid1_CurrentCellChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged If DataGrid1.CurrentCell.ColumnNumber =3Then 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 EndIf End Sub PrivateSub DataGrid1_Scroll()Sub DataGrid1_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll MyCombo.Visible =False MyCombo.Width =0 End Sub PrivateSub DataGrid1_Click()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 Form1Class Form1 Inherits System.Windows.Forms.Form 'Form 重写 Dispose,以清理组件列表。 <System.Diagnostics.DebuggerNonUserCode()> _ ProtectedOverridesSub Dispose()Sub Dispose(ByVal disposing AsBoolean) If disposing AndAlso components IsNot NothingThen components.Dispose() EndIf MyBase.Dispose(disposing) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意: 以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改它。 '不要使用代码编辑器修改它。 <System.Diagnostics.DebuggerStepThrough()> _ PrivateSub InitializeComponent()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(12, 12) Me.DataGrid1.Name ="DataGrid1" Me.DataGrid1.Size =New System.Drawing.Size(659, 435) 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(683, 482) Me.Controls.Add(Me.DataGrid1) Me.Name ="Form1" Me.Text ="Form1" CType(Me.DataGrid1, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub FriendWithEvents DataGrid1 As System.Windows.Forms.DataGrid End Class