DataGridView 表头中添加过滤列表(类似Excel表头过滤)
时间: 2023-11-27 16:52:10 浏览: 33
可以通过以下步骤在 DataGridView 的表头中添加过滤列表:
1. 创建一个 ContextMenuStrip,用于显示过滤选项。
```csharp
ContextMenuStrip filterMenu = new ContextMenuStrip();
```
2. 在 DataGridView 的 ColumnHeaderMouseClick 事件中判断用户是否点击了表头,并且将 ContextMenuStrip 显示在点击位置。
```csharp
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.Button == MouseButtons.Right && e.RowIndex == -1)
{
filterMenu.Show(dataGridView1.PointToScreen(e.Location));
}
}
```
3. 在 ContextMenuStrip 中添加过滤选项。
```csharp
foreach(DataGridViewColumn column in dataGridView1.Columns)
{
ToolStripMenuItem item = new ToolStripMenuItem(column.HeaderText);
item.Tag = column;
item.Checked = true;
item.CheckOnClick = true;
item.CheckedChanged += filterMenuItem_CheckedChanged;
filterMenu.Items.Add(item);
}
```
4. 在 filterMenuItem_CheckedChanged 事件中实现过滤功能。该事件在用户勾选或取消勾选过滤选项时触发。
```csharp
private void filterMenuItem_CheckedChanged(object sender, EventArgs e)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
DataGridViewColumn column = item.Tag as DataGridViewColumn;
column.Visible = item.Checked;
}
```
以上步骤可以实现 DataGridView 表头中添加过滤列表的功能。用户可以通过勾选或取消勾选过滤选项来显示或隐藏相应的列。