12
votes

On my Windows Form I have a DataGridView component, which is bound to a BindingSource. The BindingSource is an object datasource to an EntityFramework object.

Some times the columns in my DataBridView are renewed. Sometimes all properties are added as column, but now it also removed all my columns. So i've lost all my settings.

When to columns get automatically get added?

(I'm using VS.NET 2010)

Update:

//
// Summary:
//     Gets or sets a value indicating whether columns are created automatically
//     when the System.Windows.Forms.DataGridView.DataSource or System.Windows.Forms.DataGridView.DataMember
//     properties are set.
//
// Returns:
//     true if the columns should be created automatically; otherwise, false. The
//     default is true.
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Advanced)]
[DefaultValue(true)]
public bool AutoGenerateColumns { get; set; }

The property did not show up in the designer, and "hide advanced properties" is not checked.

Update 2: When I update my entity framework model, all columns are added again. I only can set the property in the constructor of the form. This is very annoying.

5
Set AutoGenerateColumns property of DataGridView to false.Nikola Markovinović
I am setting AutoGenerateColumns = false in the form constructor but still get the problemKirsten
In my case, these naughty auto-generated columns only appear in the designer, not on the actual form. Seems like a bug.QuickDanger
same here, any time I re-open a form with a datagridview, it generates all columns from the bounded source.Oleksandr

5 Answers

7
votes

I actually don't know when this happens, but I tend to create all the columns manually. I create the columns in the designer and set the AutoGenerateColumns property to false in my code.

6
votes

Add this code or change your DataGridView Property AutoGenerateColumns to false

DataGridView1.AutoGenerateColumns=false;
4
votes

Set AutoGenerateColumns property to False but keep remember do it just before databinding. eg: DataGridView1.AutoGenerateColumns=false; DataGridView1.DataSource=getData();

By default it is set to True.

1
votes

Try leave first of auto generated columns and set it visibility false. If it don't help try leave all them with Visible=false. Sorry for bad English.

0
votes

I had the same problem. I couldn't find the AutoGenerate property in my code.

For reasons I do not understand my DataGridView does not have an AutoGenerate property that I can see in my VB code.

I do not see a checkbox on the Edit Columns dialog box.

I do not see an AutoGenerate property in the grid's properties view.

I have Visual Studio Community 2017.

Here's my class properties:

Public Property BatchId As Integer
Public Property Code as String
Public Property Count As Integer
Public Property Description As String
Public Property Id As Integer

So, here's what I did:

  1. I went to the form designer.
  2. I right-clicked on the DataGridView.
  3. I selected Edit Columns.
  4. I made sure each column had the DataPropertyName field set to the class property name.

When I ran my application the DataGridView displayed only those columns in my class.