DataGridView ID列不会隐藏

| 我有一个绑定到ObjectDataSource的DataGridView,其中某些列(包括ID列)被隐藏了。问题在于,即使ID列的visible属性设置为false,它也会显示出来。有人遇到过这个问题吗?不能将宽度设置为零,因为网格不允许宽度小于5像素的列,因此无论如何它仍会在网格上显示该列。 奇怪的是,ID列并非总是显示。在我对该应用程序进行了一段时间的工作之后,这些列再次出现。 未将DataGridView设置为自动生成列。我正在构建到.NET和C#的版本4.0。 这是表单构造函数中的代码。
dgvActiveMiners.AutoGenerateColumns = false;
dgvAvilableMiners.AutoGenerateColumns = false;
dgvOperationResults.AutoGenerateColumns = false;

dgvActiveMiners.Columns[\"dgvActiveMinersRecordId\"].Visible = false;
dgvAvilableMiners.Columns[\"dgvAvilableMinersRecordId\"].Visible = false;
dgvOperationResults.Columns[\"dgvOperationResultRecordId\"].Visible = false;
这是为网格生成的代码。
this.dgvOperationResults.AllowUserToAddRows = false;
this.dgvOperationResults.AllowUserToDeleteRows = false;
this.dgvOperationResults.AutoGenerateColumns = false;
this.dgvOperationResults.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.dgvOperationResults.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.dgvOperationResultRecordId,
this.nameDataGridViewTextBoxColumn2,
this.typeIdDataGridViewTextBoxColumn,
this.amountDataGridViewTextBoxColumn,
this.operationIdDataGridViewTextBoxColumn});
this.dgvOperationResults.DataSource = this.operationResultBindingSource;
this.dgvOperationResults.Location = new System.Drawing.Point(12, 40);
this.dgvOperationResults.MultiSelect = false;
this.dgvOperationResults.Name = \"dgvOperationResults\";
this.dgvOperationResults.ReadOnly = true;
this.dgvOperationResults.Size = new System.Drawing.Size(498, 247);
this.dgvOperationResults.TabIndex = 16;
我不知道我还能缺少什么? 谢谢!     
已邀请:
        建议1: 尝试在FormLoad事件中将DGV Column \的Visible属性显式设置为false:
dataGridView.Columns[\"YourIdColumn\"].Visible = false;
建议2: 尝试将dgvActiveMinersRecordId列从DGV的第一列更改为最后一列。     
        为了让下一个像我这样出现的人更一般地回答这个问题... 这似乎确实是一个错误,但是解决方法是: 确保要隐藏的列显示在最后 这将取决于您的代码,但是对于某些情况,它将是: SQL代码已更改,以便稍后返回列 更改添加datagridview列的代码,将\“ to hide \”列放在末尾 按照@Steve \的帖子,将ѭ3设置为最后一列     
        也许有点晚了,但我还是为同样的问题而烦恼,我有两个单独的表格,其中的DataGridViews都绑定到了不同的DataTables。一个隐藏第一列没有问题,另一方面我尝试的一切都没有用,直到... 注意:[\“ newCol \”]是数据表中的第一列(即列0)。 此代码无法隐藏列[0](或名称[\“ NewRow \”])
...
MyDataGridView.DataSource = MyDatatable;
MyDataGridView.Columns[\"NewRow\"].Visible = false;   // doesn\'t hide (col 0)
// MyDataGridView.Columns[0].Visible = false;  <<<< this didn\'t work either
MyDataGridView.Columns[\"Changed\"].Visible = false;
MyDataGridView.Columns[\"Active\"].Visible = false;
MyDatatable.RowFilter = \"[Active] = 1\";
...
此代码有效:
...
MyDataGridView.DataSource = MyDatatable;
MyDatatable.RowFilter = \"[Active] = 1\";
MyDataGridView.Columns[\"NewRow\"].Visible = false;   // YAY!! Now it hides
// MyDataGridView.Columns[0].Visible = false;       <<<< and this works too
MyDataGridView.Columns[\"Changed\"].Visible = false;
MyDataGridView.Columns[\"Active\"].Visible = false;
...
指出不同?这是我指定RowFilter的地方。 另一种形式没有开始的RowFilter,但是在以后的两种形式中,我都更改了RowFilter(取决于用户操作),列0永不返回。 似乎为列0隐藏列后不久指定RowFilter失败。 非常非常奇怪!!!非常非常令人沮丧!!!     
        我有同样的问题。 即使浏览该值表明它为假,以下行仍使该列可见。
dataSelected.Columns[\"id\"].Visible = false;
在将DisplayIndex设置在列上之前,我没有这个问题
dataSelected.Columns[\"ipagenum\"].DisplayIndex = 6;
将有问题的列DisplayIndex移到末尾,可以解决此问题。
dataSelected.Columns[\"id\"].DisplayIndex = 15;
    
        我想提出一个未被提及的观点。 DataGridView的每一列都有一个属性名称。您可以按名称直接访问列,就像访问任何其他元素一样。例如:ColumnName.Property = AnyProperty。在您的情况下:ColumnName.Visible = false。 我认为这更干净,更直接,而且出错的可能性也较小。我们也对编译器有所帮助:) 这样,就不必使用DataGridView的属性名称,也不必定位所需的列来中介一个字符串(可以提交) 一个错误)。我的意思是:YourDataGridView.Columns [\“ YourColumn \”]属性= AnyProperty。     
        这很奇怪。 您确定要调用正确的列名吗?我意识到这将是一个愚蠢的错误,但是它确实发生了! 这是您可以尝试的简单测试:
void test(string columnName, bool visibility) {
  if (dataGridView1.Columns.Contains(columnName)) {
    dataGridView1.Columns[columnName].Visible = visibility;
  } else {
    throw new Exception(string.Format(\"Column \'{0}\' does not exist in DataGridView \'{1}\'.\", columnName, dataGridView1.Name));
  }
}
    
        我遇到了同样的问题,以上都不适合我。我的解决方法是至少为应该在设计器中“编辑列”中隐藏的列设置DataPropertyName。     
        如果要按名称隐藏列,则必须在列中提供一个名称。初始化属性Name,然后可以通过代码使用它。     
        我遇到了同样的问题,并且我不想将id列的索引更改为visible属性。因此,我注意到在指示ID为“ 10”之后,我正在删除DataGridView的最后一行,这就是ID列出现的原因。因此,我首先删除该行,然后指示ID为“ 11”。     

要回复问题请先登录注册