如何使列容易可见?

How can make columns visible easly?

我的项目有一个包含 52 列的 DataGridView,其中一些列不可见。但我希望用户能够轻松地看到它们。所以我添加了一个按钮,如下图所示。这使五列可见。

但是滚动时出现问题,这个按钮在表单上保持静态。我希望此按钮锚定到特定列 header。可随列 header.

移动

所以我尝试将 DataGridView 和 Button 控件放在与 children 相同的面板上。这是可行的,但面板滚动的功能不如 DataGridView 的滚动。例如,在面板中滚动冻结的列不起作用。

有什么解决办法吗?我希望用户像 Excel 一样轻松地使列可见或不可见。没有必要使用按钮。 İ如果还有其他选择,我很感兴趣。

我将展示一个示例,说明如何使用上下文菜单显示和隐藏 DataGridView 列。

向表单添加菜单:

ContextMenuStrip columnMenu;

像这样创建菜单。每列都有一个带有复选框的菜单项。
当然也可以在设计器中手动创建和填写。

private void Form1_Load(object sender, EventArgs e)
{
    columnMenu = new ContextMenuStrip();

    foreach (DataGridViewColumn column in dataGridView.Columns)
    {
        var item = new ToolStripMenuItem();
        item.Text = column.Name;
        item.CheckOnClick = true;
        item.Checked = true;
        item.Click += Item_Click;
        columnMenu.Items.Add(item);
    }
}

当您 select 一个菜单项时,显示或隐藏该列。

private void Item_Click(object sender, EventArgs e)
{
    var item = (ToolStripMenuItem)sender;
    dataGridView.Columns[item.Text].Visible = item.Checked;
}

订阅事件的 DataGridView:

dataGridView.ColumnHeaderMouseClick += DataGridView_ColumnHeaderMouseClick;

在此事件处理程序中,显示菜单。

private void DataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    columnMenu.Show(MousePosition);
}