Reputation: 89
I am adding datagridview columns programatically. However, it generates extra column than the specified number of columns. I have 15 columns and it generates total 16 columns. I tried to set autogenerate false but didn't help
public Admin()
{
InitializeComponent();
this.dgv.AutoGenerateColumns = false;
}
private void Admin_Load(object sender, EventArgs e)
{
dgv.ColumnCount = 15;
DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.Name = "Check";
checkColumn.DataPropertyName = "Check";
checkColumn.HeaderText = "Select";
checkColumn.Width = 50;
checkColumn.DisplayIndex = 0;
checkColumn.ReadOnly = false;
checkColumn.FillWeight = 10;
dgv.Columns.Add(checkColumn);
dgv.Columns[1].Name = "Class";
dgv.Columns[1].DataPropertyName = "Class";
dgv.Columns[2].Name = "Recipient Name";
dgv.Columns[2].DataPropertyName = "Recipient Name";
dgv.Columns[3].Name = "Dest. Address 1";
dgv.Columns[3].DataPropertyName = "Dest. Address 1";
dgv.Columns[4].Name = "Dest. Address 2";
dgv.Columns[4].DataPropertyName = "Dest. Address 2";
dgv.Columns[5].Name = "City";
dgv.Columns[5].DataPropertyName = "City";
dgv .Columns[6].Name = "State";
dgv.Columns[6].DataPropertyName = "State";
dgv.Columns[7].Name = "Postal Code";
dgv.Columns[7].DataPropertyName = "Postal Code";
dgv.Columns[8].Name = "Country";
dgv.Columns[8].DataPropertyName = "Country";
dgv.Columns[9].Name = "Description";
dgv.Columns[9].DataPropertyName = "Description";
dgv.Columns[10].Name = "Weight (lb)";
dgv.Columns[10].DataPropertyName = "Weight (lb)";
dgv.Columns[11].Name = "Value (USD)";
dgv.Columns[11].DataPropertyName = "Value (USD)";
dgv.Columns[12].Name = "Date/time";
dgv.Columns[12].DataPropertyName = "Date/time";
dgv.Columns[13].Name = "MID";
dgv.Columns[13].DataPropertyName = "MID";
//dgv.Columns[12].Visible = false;
dgv.Columns[14].Name = "CheckedBy";
dgv.Columns[14].DataPropertyName = "CheckedBy";
}
Upvotes: 1
Views: 292
Reputation: 216293
Your code sets 15 columns, but then adds another column. It is the DataGridViewCheckBoxColumn
that is added as 16th column, but moved to the first position in the display (DisplayIndex = 0
).
Then you start to initialize your columns but, as every array in NET start at index 0, not at index 1, you skip the initialization the column at index zero (but now moved at DisplayIndex = 1). This results in an empty column displayed just after the check box column.
You could add just 14 columns and change your indexing starting from 0 and ending at 13
dgv.ColumnCount = 14;
DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
... after this add you have 15 columns
dgv.Columns.Add(checkColumn);
...... start indexing at index 0
dgv.Columns[0].Name = "Class";
dgv.Columns[0].DataPropertyName = "Class";
.... decrease the indexing of the other columns by 1
dgv.Columns[13].Name = "CheckedBy";
dgv.Columns[13].DataPropertyName = "CheckedBy";
Upvotes: 1