在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
'新建一个项目后,只需在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
相关文章推荐
- 将Excel中数据导入DataGridView中并实现筛选功能
- DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样
- 我的ASPxGridView控件的数据是在后台绑定的,但是实现不了筛选和分页的功能,只能显示一页的数据?
- 用DataGridView实现Excel列的复杂筛选功能
- 改进上一篇读取EXCEL的数据到datagridview(增加导出Excel功能)
- DrawerLayout+ListView+AutoCompleteTextView实现侧滑+提示+筛选+再次筛选数据功能
- Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现
- Android实现类似Excel显示数据功能(支持拖动改变列宽)v 1.0
- C#实现读写EXCEL数据—附实例导出DATAGRIDVIEW 数据到EXCEL
- ThinkPHP 整合 PHPExcel ,数据导出功能实现,解决Invalid cell coordinate PHPExcel想必大家都不陌生,是用来操作Office Excel 文档的一个PHP
- c# 实现将dataGridView中的数据导出到Excel
- DataGridVIew实现列下拉筛选功能
- Excel中只对可见数据求和,实现完美自动筛选.
- asp.net实现 EXCEL数据导入到数据库功能
- 将DataGridView控件中数据导出到Excel
- 基于JavaScript实现前端数据多条件筛选功能
- TreeList控件实现数据过滤功能
- selenium配合phantomjs实现爬虫功能,并把抓取的数据写入excel
- 原创 c# 封装的带CheckBox的DataGridViewColumnHeaderCell 源码部分 实现DataGridView列头带CheckBox控件实现全选功能,支持列头带标题
- Visual Basic 2012 借助DataGridView控件将Excel 2010数据导入到SQL server 2012