C#-Datagridview列

C#-Datagridview列,c#,winforms,datagridview,C#,Winforms,Datagridview,我在WinForm中有一个DataGridView。我从数据库表中填充DataGridView。我想知道是否有任何方法可以对我的DataGridView进行编程,以便我可以选择在运行时希望gridview显示哪些列?使用DataGridView.AutoGenerateColumns属性--设置为false。明确地配置所需的列,就可以开始了。简单的答案是“是” 首先,您需要将DataGridView的AutoGenerateColumns属性设置为false,然后您可以控制显示哪些列 过去,我为

我在WinForm中有一个
DataGridView
。我从数据库表中填充
DataGridView
。我想知道是否有任何方法可以对我的
DataGridView
进行编程,以便我可以选择在运行时希望gridview显示哪些列?

使用
DataGridView.AutoGenerateColumns
属性--设置为
false
。明确地配置所需的列,就可以开始了。

简单的答案是“是”

首先,您需要将
DataGridView
AutoGenerateColumns
属性设置为false,然后您可以控制显示哪些列

过去,我为DGV创建了一个上下文菜单:

ContextMenu = new ContextMenu();
foreach (var column in this.dataGridView.Columns)
{
    this.AddContextMenuItem(ContextMenu, column.Name, column.Visible);
}

private void AddContextMenuItem(ContextMenu contextMenu,
                                string columnName,
                                bool visible)
{
    var menuItem = new MenuItem(columnName,
        new EventHandler(this.ContextMenu_onClick)) { Checked = visible };
    contextMenu.MenuItems.Add(menuItem);
}
然后,当切换菜单选项时,更改列的
Visible
属性

private void ContextMenu_onClick(object sender, EventArgs e)
{
    var clicked = sender as MenuItem;
    if (clicked != null)
    {
        // Update the state of the context menu
        clicked.Checked = !clicked.Checked;

        // Update the visibity of this column
        this.dataGridView.Columns[clicked.Text].Visible = clicked.Checked;
    }
}

我想知道当我运行应用程序时,是否有任何方法可以选择列。我想右击gridview顶部的klick,然后从列表中选择我想要的Coulmn。有什么办法吗?我想控制在应用程序运行时显示哪些coulmns。我想右键单击gridview顶部并从列表中选择要显示的列。一定有办法的。我稍后会试着运行它。Thnx非常:我无法使其工作:S,我在运行应用程序时,foreach循环出现错误,并且表单上没有菜单:S@Erik-你会犯什么错误?我确实从我的应用程序中提取了代码,所以我有可能遗漏了什么。您还必须将右键单击绑定到上下文菜单(我没有显示)。如果我将代码复制并粘贴到我的应用程序中,它将不起作用,首先我必须创建ContextMenu context=new ContextMenu()的实例,然后在foreach循环中,错误是:对象不包含名称和可见的定义。我该怎么办?我有点困惑:D