Datagridview生成额外的列

本文关键字:Datagridview | 更新日期: 2023-09-27 18:13:56

我正在以编程方式添加datagridview列。但是,它会生成比指定列数多的列。我有15列,它总共生成16列。我尝试将autogenerate设置为false,但没有帮助

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";
}

Datagridview生成额外的列

您的代码设置了15列,但随后添加了另一列。DataGridViewCheckBoxColumn被添加为第16列,但被移动到显示中的第一个位置(DisplayIndex = 0)。

然后开始初始化列,但是,由于NET中的每个数组都从索引0开始,而不是从索引1开始,因此可以跳过索引0处的列的初始化(但现在在DisplayIndex = 1处移动)。这导致在复选框列之后显示一个空列。

你可以只添加14列,并改变你的索引从0开始,以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";