2

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

但 Ist 列并没有隐藏。

尝试了以下两件事:

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

和:

dgvVendorDetails.Columns[0].Visible = false;

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

4

3 回答 3

4

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

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

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

所以有可能:

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

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

另请参阅这些相关问题:

编辑

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

这个线程如何在绑定到 DataTable 的 Datagridview 中选择可见列可以帮助您实现这一点和/或在这两个选项之间做出选择。

于 2013-09-13T18:37:00.727 回答
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;
}
于 2013-12-12T08:51:11.403 回答
0

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

于 2013-09-13T19:21:54.107 回答