为DataGridView添加自动搜索框
搜索框要跟随DataGridView的列宽自动伸缩
datagridview中的各种数据类型都能参与检索
用法:在form的load事件里 添加 dim x as new tjss(datagridview1)
Class tjss
Dim dv As DataGridView
Dim sp As SplitContainer
Sub New(ByVal dv As DataGridView)
Me.dv = dv
addsp()
addtext(dv, sp)
AddHandler dv.Paint, AddressOf Data_Paint
End Sub
Sub Data_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
Dim ss As Control = sender
'Dim sp As SplitContainer = ss.Parent.Parent
Dim dv1 As DataGridView = dv
For Each c As Control In sp.Panel1.Controls
If c.Tag Is Nothing Then Continue For
If dv1.Columns(c.Tag) Is Nothing Then Exit Sub
Dim co As DataGridViewColumn = dv1.Columns(c.Tag)
Dim r As Rectangle
r = dv1.GetCellDisplayRectangle(co.HeaderCell.ColumnIndex, co.HeaderCell.RowIndex, False)
r = dv1.RectangleToScreen(r)
Dim r1 As Rectangle = sp.DisplayRectangle
r1 = sp.RectangleToScreen(r1)
c.Left = dv1.FindForm.RectangleToClient(r).Location.X - r1.Left + 7 + dv1.FindForm.Left
c.Width = co.Width - 4
Next
End Sub
Sub addtext(ByVal dv As DataGridView, ByVal sp As SplitContainer)
For Each co As DataGridViewColumn In dv.Columns
If co.Visible Then
Dim tx As New TextBox
tx.Name = "Text" & co.Name
tx.Tag = co.Name
sp.Panel1.Controls.Add(tx)
tx.Left = co.Index + 5
AddHandler tx.TextChanged, AddressOf TextBox45_TextChanged
'MsgBox(t.Tag.ToString)
End If
Next
End Sub
Sub addsp()
Dim p As Control = dv.Parent
sp = New SplitContainer
sp.Orientation = Orientation.Horizontal
sp.SplitterDistance = 30
sp.IsSplitterFixed = True
sp.FixedPanel = FixedPanel.Panel1
p.Controls.Add(sp)
sp.Dock = dv.Dock
sp.Anchor = dv.Anchor
sp.Location = dv.Location
sp.Size = dv.Size
dv.Parent = sp.Panel2
dv.Dock = DockStyle.Fill
'sp.Panel2.BackColor = Color.Red
'sp.Panel1.BackColor = Color.Red
End Sub
End Class