【问题标题】:Not able to hide first column in datagridview?无法隐藏 datagridview 中的第一列?
【发布时间】:2013-09-13 16:28:03
【问题描述】:

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

但 Ist 列并未隐藏。

尝试了以下两件事:

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

还有:

dgvVendorDetails.Columns[0].Visible = false;

我不知道这背后的原因。我搜索了很多但没有解决方案。

【问题讨论】:

  • 邮政编码显然有效。您必须提供更多详细信息才能找到问题的根源。
  • 尝试将您的列 dgvVendorDetails 从第一列更改为最后一列。
  • 您是通过什么方法添加的语句将其设置为false?
  • 代码放在哪里?你确定代码被执行了吗?或者除了第一列之外还有 1 列被隐藏?

标签: c# winforms datagridview


【解决方案1】:

这两种语法都是正确的,应该可以工作:

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

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

所以有可能:

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

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

另请参阅这些相关问题:

编辑

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

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

【讨论】:

    【解决方案2】:

    将自动生成列设置为 false,然后将每一列一一添加到网格中。然后将不想看到的列设置为可见 = false。不需要后面的代码。

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 2013-05-19
        • 2013-08-11
        • 2019-11-01
        • 1970-01-01
        相关资源
        最近更新 更多