C# 如何隐藏绑定DataGridView的最后一列?

C# 如何隐藏绑定DataGridView的最后一列?,c#,winforms,user-interface,datagridview,C#,Winforms,User Interface,Datagridview,我将DataGridView绑定到一个数据源,该数据源基于用户输入,将其列隐藏在DataBindingComplete事件中。 它可以正常工作,除非当所有列都需要隐藏时,最后一个要隐藏的列总是显示出来。 在调试期间,我可以看到该列被设置为visible=false,但它没有任何效果 我有一个很好的解决方法,在DataBindingComplete事件中触发计时器并调用HideColumns()方法,但我正在寻找更好的解决方案 private void CoverageDGV_DataBi

我将DataGridView绑定到一个数据源,该数据源基于用户输入,将其列隐藏在DataBindingComplete事件中。 它可以正常工作,除非当所有列都需要隐藏时,最后一个要隐藏的列总是显示出来。 在调试期间,我可以看到该列被设置为visible=false,但它没有任何效果

我有一个很好的解决方法,在DataBindingComplete事件中触发计时器并调用HideColumns()方法,但我正在寻找更好的解决方案

    private void CoverageDGV_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
    {            
        var datagridview = sender as DataGridView;

        datagridview.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.TopLeft;            
        datagridview.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
        datagridview.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;

        datagridview.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.ColumnHeader;            
        datagridview.RowHeadersVisible = true;            
        datagridview.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
        datagridview.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;                                                    
        datagridview.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

        HideColumns(datagridview);

        //timer1.Enabled = true; // This works fine
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        HideColumns(ShipCoverageDGV);
    }

    private void HideColumns(DataGridView datagridview)
    {
        for (int i = 0; i < datagridview.Columns.Count; i++)
        {
            var column = datagridview.Columns[i];
            var itemType = [USER INPUT];
            if (itemType == Glossary.IndirectCOType)
                column.Visible = IndirectCOCheckBox.Checked;
            else if (itemType == Glossary.NotAllocatedType)
                column.Visible = NotAllocatedCheckBox.Checked;
            else
                column.Visible = DirectCOCheckBox.Checked;                    
        }           
    }
private void coverage dgv_数据绑定完成(对象发送方,DataGridViewBindingCompleteEventTarget)
{            
var datagridview=发送方为datagridview;
datagridview.ColumnHeadersDefaultCellStyle.Alignment=DataGridViewContentAlignment.TopLeft;
datagridview.DefaultCellStyle.WrapMode=DataGridViewTriState.True;
datagridview.DefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleCenter;
datagridview.AutoSizeColumnsMode=DataGridViewAutoSizeColumnsMode.ColumnHeader;
datagridview.RowHeadersVisible=true;
datagridview.RowHeadersWidthSizeMode=DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
datagridview.ColumnHeadersWeightSizeMode=DataGridViewColumnHeadersWeightSizeMode.AutoSize;
datagridview.AutoSizeRowsMode=DataGridViewAutoSizeRowsMode.AllCells;
HideColumns(datagridview);
//timer1.Enabled=true;//这工作正常
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
timer1.Enabled=false;
HideColumns(船舶保险);
}
私有void HideColumns(DataGridView DataGridView)
{
for(int i=0;i

我的问题是:有没有办法隐藏所有列?

dataGridView1.columns[0]。Visible=false

所以,您基本上是将所有列的
列.Visible
设置为false,对吗?你能简化方法吗(反正我们不能访问你的枚举)?请考虑创建一个。如果没有一个可运行的示例,我们就无法重现这个问题。如果您只是用任意数据填充一个
DataTable
,将其绑定,然后隐藏所有列,这样做有效吗?如果是这样的话,从那里开始,每次对当前代码更改一件事情,直到它停止工作,并且您发现了问题。如果没有,请向我们提供基本代码,作为我们测试的基础,看看我们是否能够解决问题。否则,每个想要帮助的人都必须创建自己的测试代码。如果你需要帮助,你可以帮我们,不是吗?公平地说,我会这么做我不能复制。我发现了问题。在DataBindingComplete之后,我有一些使用CurrencyManager.SuspendBinding操作的代码。调用此命令后,最后一个隐藏列将恢复显示。不清楚为什么,但这就是问题所在