【问题标题】:How to allow users hide columns in dataGridView?如何允许用户隐藏 dataGridView 中的列?
【发布时间】:2020-05-14 23:59:29
【问题描述】:

我有一个带有 dataGridView 的 WinForms 应用程序,它有 26 列,并填充了来自数据库的数据。如何允许用户隐藏他们不想看到的列并稍后再次显示?我知道如何以编程方式进行,但问题是用户应该如何进行。以下是我的坏主意:

  1. 一个复选框列表,每列都可以在此处单击 - 这很糟糕,因为该列表太长并且不适合表单。

  2. 每个标题上都有一个复选框,但我不知道如何使这些复选框“粘贴”并随着标题水平滚动。

  3. 单击标题 - 这对隐藏很有效,但无法再次显示此列。

那么这里的解决方案是什么?

【问题讨论】:

  • 一个更糟糕的方法是为每一列创建一个包含ToolStripMenuItemContextMenuStripCheck 显示,UnCheck 隐藏。
  • @JQSOFT:同意你的观点,例如Windows 资源管理器在右窗格中。 Windows 用户熟悉该过程。
  • @JQSOFT 为什么这是一个坏的?许多允许显示/隐藏列的应用程序使用类似的东西,包括 Explorer。 -- 除了之前的解决方案(您可以轻松采用)之外,如果您计划提供更多选项来配置 DGV 布局/外观,您还可以使用选项按钮显示/隐藏 CheckedListBox,可能在临时配置面板中.
  • @JQSOFT 这听起来像是对我的第一想法的优雅改进,我喜欢它

标签: c# winforms user-interface datagridview


【解决方案1】:

最好的解决方案是在双击标题并将隐藏列添加到弹出菜单后隐藏列。弹出菜单只包含隐藏的列,所以不会太长。单击弹出菜单项会将其从菜单中删除并显示该列。

代码:

private void DataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                string column = dataGridView1.Columns[e.ColumnIndex].Name;
                dataGridView1.Columns[column].Visible = false;
                contextMenuStrip1.Items.Add(column);
            }
        }

private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            var menuText = e.ClickedItem.Text;
            dataGridView1.Columns[menuText].Visible = true;
            contextMenuStrip1.Items.Remove(e.ClickedItem);
        }

【讨论】:

    猜你喜欢
    • 2013-05-19
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2021-06-30
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多