您的位置:首页 > 其它

在DataGridView控件上实现列标头象Excel带数据筛选功能

2013-06-11 08:29 495 查看
'VB.NET 2008 环境

'新建一个项目后,只需在Form1中拉一个DataGridView,一个ComboBox,然后将下面代码复制粘贴即可,其它什么也不用做

Public Class Form1

    Dim SelectedCol
As Integer =
0, IsFindit As
Boolean = True

    Private Sub Form1_Load(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles MyBase.Load

        DataGridView1.ColumnCount = 6

        DataGridView1.Rows.Add(10)

        DataGridView1.AllowUserToAddRows = False

        For i As
Integer = 0
To Me.DataGridView1.Columns.Count -
1

            Me.DataGridView1.Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable

        Next

        '以下所有代码只是为了添加演试数据需要
        For i =
0 To DataGridView1.RowCount -
1

            For j
As Integer =
0 To DataGridView1.ColumnCount -
1

                DataGridView1.Columns(j).HeaderText =
"第 " & j.ToString &
" 列"

                DataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter

                DataGridView1.Rows(i).Cells(j).Value = (i +
5) * (j + 2)

            Next

            If i Mod
2 = 0
Then

                DataGridView1.Rows(i).Cells(2).Value =
"ds"

            Else

                DataGridView1.Rows(i).Cells(3).Value =
"测试一下"

            End If

        Next

    End Sub

    Private Sub DataGridView1_ColumnHeaderMouseClick(ByVal sender
As Object,
ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) _

        Handles DataGridView1.ColumnHeaderMouseClick

        '这里是模拟EXCEL排序的关键部分
        SelectedCol = e.ColumnIndex

        Dim range
As New System.Drawing.Rectangle

        Dim dLeft, dTop
As Double

        range = DataGridView1.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex,
False)

        dLeft = range.Left + DataGridView1.Left

        dTop = range.Top + DataGridView1.Top

        ComboBox1.SetBounds(dLeft, dTop, range.Width, range.Height)

        ComboBox1.Items.Clear()

        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList

        ComboBox1.Items.Add("请选择筛选")

        For i As
Integer = 0
To DataGridView1.RowCount -
1

            IsFindit = False

            For j =
0 To ComboBox1.Items.Count -
1

                If ComboBox1.Items(j).ToString = DataGridView1.Rows(i).Cells(e.ColumnIndex).Value.ToString
Then

                    IsFindit = True

                    j = ComboBox1.Items.Count

                End
If

            Next

            If Not IsFindit
Then ComboBox1.Items.Add(DataGridView1.Rows(i).Cells(e.ColumnIndex).Value.ToString)

        Next

        ComboBox1.SelectedIndex = 0

        ComboBox1.Show()

    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender
As Object,
ByVal e As System.EventArgs)
Handles ComboBox1.SelectedIndexChanged

        '这里是筛选功能
        Select
Case ComboBox1.SelectedIndex

            Case 0

                For i
As Integer =
0 To DataGridView1.RowCount -
1

                    DataGridView1.Rows(i).Visible = True

                Next

            Case Else

                For i
As Integer =
0 To DataGridView1.RowCount -
1

                    If DataGridView1.Rows(i).Cells(SelectedCol).Value.ToString <> ComboBox1.SelectedItem.ToString
Then

                        DataGridView1.Rows(i).Visible =
False

                    Else

                        DataGridView1.Rows(i).Visible =
True

                    End
If

                Next

        End Select

        If ComboBox1.SelectedIndex =
0 Then ComboBox1.Hide()

    End Sub
End Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DataGridView ComboBox
相关文章推荐