C# 将Combobox添加到DataGridView标题

C# 将Combobox添加到DataGridView标题,c#,winforms,C#,Winforms,当我运行代码时,dataGridView TopLeftHeaderCell也有一个组合框。我怎样才能改变这一点 这是我的密码: public void AddHeaders(DataGridView dataGridView) { for (int i = 0; i < 4; i++) { // Create a ComboBox which will be host a column's cell Com

当我运行代码时,dataGridView TopLeftHeaderCell也有一个组合框。我怎样才能改变这一点

这是我的密码:

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<string, string> 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;

        }
}
public void AddHeaders(DataGridView DataGridView)
{
对于(int i=0;i<4;i++)
{
//创建一个组合框,它将承载列的单元格
ComboBox comboBoxHeaderCell=新ComboBox();
comboBoxHeaderCell.DropDownStyle=ComboBoxStyle.DropDownList;
comboBoxHeaderCell.Visible=true;
foreach(KeyValuePair标签在_标签中)
{
comboBoxHeaderCell.Items.Add(label.Key);
}
//将组合框添加到列的标题单元格
添加(comboBoxHeaderCell);
comboBoxHeaderCell.Location=dataGridView.GetCellDisplayRectangle(i,-1,true).Location;
comboBoxHeaderCell.Size=dataGridView.Columns[0].HeaderCell.Size;
comboBoxHeaderCell.Text=_标签[i].Key;
}
}
谢谢你的代码

comboBoxHeaderCell.Location = dataGridView.GetCellDisplayRectangle(i, -1, true).Location;
将始终返回
0,0
,因此您将
组合框
放在
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;
intxpos=dataGridView1.Width;
对于(int i=0;i<4;i++)
{
xPos-=dataGridView1[i,0].Size.Width;
}
...
comboBoxHeaderCell.Size=dataGridView.Columns[0].HeaderCell.Size;
comboBoxHeaderCell.Location=新点(xPos,0);
xPos+=comboBoxHeaderCell.Size.Width;
公共void AddHeaders(DataGridView DataGridView)
{
对于(int i=0;i<4;i++)
{
//创建一个组合框,它将承载列的单元格
DataGridViewComboBoxCell ComboxHeaderCell=新DataGridViewComboxCell();
foreach(KeyValuePair标签在_标签中)
{
comboBoxHeaderCell.Items.Add(label.Key);
}
//将组合框添加到列的标题单元格
dataGridView[i,0]=comboBoxHeaderCell;
comboBoxHeaderCell.Value=_标签[i].Key;
}
}

试试这个,它会解决你的问题,我删除了那些行,他们不是强制性的保留默认情况下,它将是可见的。。。默认情况下,它将采用单元格大小…

以及解决方案?OP似乎想将每个组合框添加到每个columnheader,而不是简单地解释为什么他的代码不起作用。我没有解决方案,因为我仍然不知道他为什么会这样做。如果他能解释他想做什么,我就能提供帮助我需要为列中的每个标题提供一个组合框,除了TopLeftHeaderCell我有一个错误,说索引DataGridViewCell.Visible,DataGridViewCell.Size,DataGridViewCell.Test没有分配,它是只读的
    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<string, string> 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;


    }
}