'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