DataGridView ID Column Will Not Hide

Viewed 22689

I have a DataGridView bound to an ObjectDataSource some of the columns are hidden including the ID column. The problem is that the ID column shows up even when its visible property is set to false. Has anyone run into this problem before? Setting the width to zero is not an option since the grid doesn't allow columns with a width less than 5 pixels wide so it still shows the column on the grid no matter what.

The strange thing is that the ID column wasn't always showing. After I worked on the app for a bit the columns appeared again.

DataGridView is not set to auto generate columns. I am building to version 4.0 of .NET and C#.

Here is the code in the form constructor.

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 is the generated code for the grids.

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;

I don't know what else I could be missing?

Thanks!

11 Answers

I was having the same problem, and I did not want have to change the index of my id column to the visible property works. So I noticed that after I indicated that the id column visible = false, I was deleting the last row of the DataGridView and this is what was making the id column appear. So I delete the row first and then indicate that the id column = false.

I have a similar problem. I added an unbound checkbox column to my data bound grid. It became the first column. When I stepped through my grid like so:

for (int i = 0; i < grvQuoteCostSheets.RowCount; i++)
{
   grvQuoteCostSheets[grcQCostSProfit.Index, i].Value
      = (Convert.ToInt32(grvQuoteCostSheets[grcQCostSPrice.Index, i].Value) - Convert.ToInt32(grvQuoteCostSheets[grcQCostSTotalCost.Index, i].Value));
}
idColumn.Visible = false;   //Need to rehide.

The first hidden column visibility switched to False. I moved the CKBox column from first to 3rd place as suggested in a different answer (the next two columns being an ID value & Line# respectively, and hidden) and the checkbox column stayed hidden. I was hiding the ID column after the math as it was flipping to Visible. I just lived with it before (hiding the ID column after the math loop), but now that I added the checkbox column, I decided to dig a bit, and here I am. I also tried doing the math in a list grabbed from the grid, and the checkbox column would still flip to Visible when the CKBox was first. I’m still stuck with the first hidden column wanting to flip to visible, so I re-hide it. I do have AutoGenerateColumns = False and am explicitly setting the first column visibility to false as well. Both to no avail.

Don't know if anybody is still struggling with the issue. I had the same problem and was setting the visible property in the dataSourceChanged event.

When I put the visible false in the show event instead it worked.

Related