无法隐藏datagridview中的第一列?

时间:2013-09-13 16:28:03

标签: c# winforms datagridview

我在Windows窗体中有datagridview,其中包含一些列。我想通过后面的代码隐藏Ist列( CompanyID )。

但Ist专栏并未隐藏。

尝试了以下两件事:

dgvVendorDetails.Columns["CompanyID"].Visible = false;

dgvVendorDetails.Columns[0].Visible = false;

我不知道背后的原因。我经常搜索但没有解决方案。

3 个答案:

答案 0 :(得分:4)

这两种语法都是纠正的,应该有效:

dgvVendorDetails.Columns["CompanyID"].Visible = false;
dgvVendorDetails.Columns[0].Visible = false;

我的猜测是您正在使用DataGridView.AutoGenerateColumns功能,即使您设置了DataSource属性,DatagridView也不会创建列,直到显示网格。

所以有可能:

  • 您尝试访问尚不存在的列(但代码应引发异常)
  • 或者您访问有效列,但是当网格再次绑定时它们会被替换,因此您的代码无效(可能是您的情况,因为您没有提到异常)。

如果是这样,解决方案是使用DataBindingComplete事件。

另见这些相关问题:

修改

正如@brikovich所指出的,另一个解决方案不是使用AutoGenerated列,而是创建它们并在设计时或运行时配置它们。

此帖子How to select visible columns in Datagridview bound to DataTable可以帮助您实现这一目标和/或在这两个选项之间做出选择。

答案 1 :(得分:0)

将autogenerate列设置为false,然后将每列逐个添加到网格中。然后将您不希望看到的列设置为visible = false。不需要代码。

答案 2 :(得分:0)

试试这个:

VB.net:

    Private Sub dgvVendorDetails_ColumnAdded(sender As Object, e As DataGridViewColumnEventArgs) Handles dgvVendorDetails.ColumnAdded
        If e.Column.Name = "CompanyID" Then dgvVendorDetails.Columns("CompanyID").Visible = False
    End Sub

C#:

private void dgvVendorDetails_ColumnAdded(object sender, DataGridViewColumnEventArgs e)
{
    if (e.Column.Name == "CompanyID")
        dgvVendorDetails.Columns("CompanyID").Visible = false;
}