Kreij
Senior Monkey Moderator
- Joined
- Feb 6, 2007
- Messages
- 13,817 (2.21/day)
- Location
- Cheeseland (Wisconsin, USA)
I found this strange behavior while writing a database application.
(not all code is included for brevity)
I created a DataSet, DataAdapter and Binding Source.
Data is three fields in a table. Field 1 is primary key and an identity (unique auto-incrementing)
I then initialized stuff to the database (in a method);
I then bound a DataGridView to the data, had it auto-generate the columns and then turned off the visibilty of the columns that I did not want the user to see.
So at this point when the DataGridView displays it should only show Column3.
So far so good.
I then did a filter on the BindingSource in another method.
After this method runs, Column1 will always show up on the DataGridView (but not Column2), even though at this point it is supposed to be "invisible". Initial states were verifyied with debugger. After filter command, state of Column1 gets set back to visible.
I had to reset the column's visibility to false immediately following the filter command in order to get it to remain hidden.
Not sure why this is occurring, but I thought it might help someone in the event they run into this. It's also odd that it only happens for the primary key, and not Column2.
(not all code is included for brevity)
I created a DataSet, DataAdapter and Binding Source.
Data is three fields in a table. Field 1 is primary key and an identity (unique auto-incrementing)
Code:
private DataSet myDataSet = new DataSet();
private SqlDataAdapter myAdapter;
private BindingSource myBindingSource;
I then initialized stuff to the database (in a method);
Code:
private void InitializeData()
{
myAdapter = new SqlDataAdapter("select * from Table", myConnection);
SqlCommandBuilder myBuilder = new SqlCommandBuilder(myAdapter);
myAdapter.Fill(myDataSet, "Table");
myBindingSource = new BindingSource(myDataSet, "Table");
}
I then bound a DataGridView to the data, had it auto-generate the columns and then turned off the visibilty of the columns that I did not want the user to see.
Code:
myDataGridView.DataSource = myBindingSource;
myDataGridView.AutoGenerateColumns = true;
myDataGridView.Columns["Column1"].Visibility = false;
myDataGridView.Columns["Column2"].Visibility = false;
So at this point when the DataGridView displays it should only show Column3.
So far so good.
I then did a filter on the BindingSource in another method.
Code:
myBindingSource.Filter = "Column3 = Something";
After this method runs, Column1 will always show up on the DataGridView (but not Column2), even though at this point it is supposed to be "invisible". Initial states were verifyied with debugger. After filter command, state of Column1 gets set back to visible.
I had to reset the column's visibility to false immediately following the filter command in order to get it to remain hidden.
Code:
myBindingSource.Filter "Column3 = Something";
myDataGridView.Columns["Column1"].Visibility = false;
Not sure why this is occurring, but I thought it might help someone in the event they run into this. It's also odd that it only happens for the primary key, and not Column2.