如何使列容易可见?

问题描述

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

但是滚动时的问题,这个按钮在表单上保持静态。我希望此按钮锚定到特定的列标题。可移动列标题

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

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

button_on_datagridviewColumn_Header

解决方法

我将举例说明如何使用上下文菜单来显示和隐藏 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);
    }
}

选择菜单项时,显示或隐藏列。

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);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...