将Combobox添加到DataGridView标头

当我运行我的代码时,dataGridView TopLeftHeaderCell也有一个combobox。 我怎么能改变呢?

这是我的代码:

public void AddHeaders(DataGridView dataGridView) { for (int i = 0; i < 4; i++) { // Create a ComboBox which will be host a column's cell ComboBox comboBoxHeaderCell = new ComboBox(); comboBoxHeaderCell.DropDownStyle = ComboBoxStyle.DropDownList; comboBoxHeaderCell.Visible = true; foreach (KeyValuePair label in _labels) { comboBoxHeaderCell.Items.Add(label.Key); } // Add the ComboBox to the header cell of the column dataGridView.Controls.Add(comboBoxHeaderCell); comboBoxHeaderCell.Location = dataGridView.GetCellDisplayRectangle(i, -1, true).Location; comboBoxHeaderCell.Size = dataGridView.Columns[0].HeaderCell.Size; comboBoxHeaderCell.Text = _labels[i].Key; } } 

谢谢

在你的代码中,

 comboBoxHeaderCell.Location = dataGridView.GetCellDisplayRectangle(i, -1, true).Location; 

将始终返回0,0 ,因此您将ComboBox放在DataGridView中的位置0,0 ,这就是为什么我们看到这个

在此处输入图像描述

你可以使用dataGridView1[i,0].size来获得所需的大小

我正在寻找位置

我找不到,但你可以做的是使用dataGridView1.Width - dataGridView1[1,0].Size.Width你可以使用宽度,并删除所有标题宽度的大小,然后添加一个一个人。

 int xPos = dataGridView1.Width; for (int i = 0; i < 4; i++) { xPos -= dataGridView1[i, 0].Size.Width; } ... comboBoxHeaderCell.Size = dataGridView.Columns[0].HeaderCell.Size; comboBoxHeaderCell.Location = new Point(xPos, 0); xPos += comboBoxHeaderCell.Size.Width; 
  public void AddHeaders(DataGridView dataGridView) { for (int i = 0; i < 4; i++) { // Create a ComboBox which will be host a column's cell DataGridViewComboBoxCell comboBoxHeaderCell = new DataGridViewComboBoxCell(); foreach (KeyValuePair label in _labels) { comboBoxHeaderCell.Items.Add(label.Key); } // Add the ComboBox to the header cell of the column dataGridView[i, 0] = comboBoxHeaderCell; comboBoxHeaderCell.Value =_labels[i].Key; } } 

尝试这个它将解决你的问题,我删除了那些他们不是必须保留的行,因为默认情况下它将是可见的……默认情况下,它将采取单元格大小…