Alex Rivera | Logout

How do you prevent the Visual Studio designer auto-generating columns in a DataGridView?

Asked 2009-02-09T21:55:03.017
10

I generate all my columns in a subclassed DataGridView programmatically. However Visual Studio 2008 keeps reading my constructor class (which populates a DataTable with empty content and binds it to the DataGridView) and generates code for the columns in the InitializeComponent method - in the process setting AutoGenerateColumns to false.

This causes errors in design-time compilation which are only solved by manually going into the design code and deleting all references to these autogenerated columns.

How can I stop it doing this?

I have tried:

  • Making the control 'Frozen'
  • Setting the DataGridView instantiated object protected (suggested in a previous post which referred to this site)
Edit
Report

2 Answers

4

I've seen this behavior before for ComboBox's with the Items property and it's really frustrating. Here's how I've gotten around it with ComboBox. You should be able to apply this to the DataGridView.

I created a "new" property called Items and set it to not be browsable and to be explicitly be hidden from serialization. Under the hood it just accesses the real Items property.

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new ObjectCollection Items
{
    get { return ((ComboBox)this).Items; }
}

[Browsable(false)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public new object DataSource
{
    get { return ((ComboBox)this).DataSource; }
answered 2009-02-09T22:03:56.303
2

I ran into a problem similar to this, and am posting my solution here since when I wrote my question this was the top suggested question. Each time I compiled my code the designer would add each of the columns in the datasource automatically (and the next time I built my code they'd appear in the running app) despite autogenerate columns being set to false.

Eventually I managed to stop it by giving one of my columns the same name that the auto-generated column had (my columns had originally been created manually before the datasource was available).

answered 2010-09-02T13:47:23.853

Your Answer