我是 vb.net 开发问题的新手。我想用下拉菜单(作为组合框列)构建一个 datagrid/datagridview,用户在其中输入要在 db/dataset/datatable 中搜索的值。用户输入 3 个字符/数字及以上后,搜索过程开始。有什么帮助吗??谢谢
我的基本代码有点:
Imports System.Data.SqlClient
Imports System
Imports System.Collections
Imports System.Windows.Forms
Imports System.Text
Public Class Form2
Dim connetionString As String = "Data Source=sql-server;Initial Catalog=NewTest;Integrated Security=SSPI"
Dim connection As SqlConnection = New SqlConnection(connetionString)
'Create Dataset
Dim ds As New DataSet
'Create Data Adapter
Dim ItemNoAdapter As SqlDataAdapter
'Create Combobox
Dim ComboBox1 As ComboBox
Dim dt As DataTable
Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Me.DataGridView2.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() _
{Me.ItemNo, Me.Item})
Me.DataGridView2.AllowUserToOrderColumns = False
'Using For Not Re-Ordering And Re-Indexing Columns (Data Coming From DB,And Other Columns)
Me.DataGridView2.AutoGenerateColumns = False
Me.DataGridView2.BackgroundColor = System.Drawing.SystemColors.Control
Me.DataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.DataGridView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
'
'ItemNo
'
Me.ItemNo.DataPropertyName = "ItemNo"
Me.ItemNo.HeaderText = "ItemNo"
Me.ItemNo.Name = "ItemNo"
Me.ItemNo.MinimumWidth = 150
Me.ItemNo.Width = 200
Me.ItemNo.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
'
'Item
'
Me.Item.DataPropertyName = "Item"
Me.Item.HeaderText = "Item"
Me.Item.Name = "Item"
Me.Item.ReadOnly = True
'
'Using For Autosize Column Width Related To Cell Content
Me.DataGridView2.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells
Me.ItemNo.DefaultCellStyle.WrapMode = DataGridViewTriState.True
'Me.ItemNoDataGridViewComboBoxColumn.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing
ItemNoAdapter = New SqlDataAdapter("select distinct (ItemNo+' '+EnglishName) as ItemNo" _
& " from Products", connection)
'ItemNoAdapter = New SqlDataAdapter("select ItemNo from Products where ItemNo like '%'" + +"'%'", connection)
'Create and fill Dataset
ItemNoAdapter.Fill(ds, "Products")
'Get the Data Table
dt = ds.Tables("Products")
Try
connection.Open()
'MessageBox.Show("Results From Products Table")
Catch ex As Exception
'MsgBox(ex.ToString)
Finally
connection.Close()
'MessageBox.Show("Connection Closed")
End Try
' Adds the event and the event handler for the method that will
' process the timer event to the timer.
'AddHandler DataGridView1.EditingControlShowing, AddressOf DataGridView1_EditingControlShowing
AddHandler DataGridView2.EditingControlShowing, AddressOf DataGridView2_EditingControlShowing
End Sub
Private Sub DataGridView2_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView2.EditingControlShowing
If DataGridView2.CurrentCellAddress.X > 0 Then Exit Sub
'ComboBox1 = CType(e.Control, ComboBox)
ComboBox1 = TryCast(e.Control, ComboBox)
If (ComboBox1 IsNot Nothing) Then
RemoveHandler ComboBox1.KeyDown, AddressOf ComboBox1_KeyDown
AddHandler ComboBox1.KeyDown, AddressOf ComboBox1_KeyDown
End If
End Sub
Private Sub ComboBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
With ComboBox1
.DataSource = dt
.DisplayMember = "ItemNo"
.ValueMember = "ItemNo"
'Change Style To DropDown, To Allow For Data Entry
.DropDownStyle = ComboBoxStyle.DropDown
'.DropDownStyle = ComboBoxStyle.DropDownList
.AutoCompleteMode = AutoCompleteMode.SuggestAppend
.AutoCompleteSource = AutoCompleteSource.ListItems
'.BackColor = Color.Aqua
End With
End Sub
End Class