为DataGridView添加自动搜索框

为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


版权声明:本文为fanyx_bj原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。