DataGridViewComboBox - 如何允许任何值?

时间:2010-11-19 22:04:31

标签: c# winforms

我在使用VisualStudio 2010 C#Winforms时遇到了一些麻烦。

我创建了一个DataGridView,其中包含一个类型为DataGridViewComboBoxColumn的未绑定列。该列工作正常,除了与普通的ComboBox不同,我似乎无法输入任何值。我被迫从列表中选择一个值。

是否有我需要设置的属性或我可以使用的其他类型,除了提供从中选择值的列表之外,还允许我在单元格中输入任何值?

谢谢!

2 个答案:

答案 0 :(得分:10)

我认为没有一个属性允许这样做,但我找到了一个回答here,只需要做一些修改。

尝试添加以下2个事件处理程序,此处假设名为comboBoxColumn的列:

private void dataGridView1_EditingControlShowing(object sender, 
        DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox c = e.Control as ComboBox;
    if (c != null) c.DropDownStyle = ComboBoxStyle.DropDown;
}

private void dataGridView1_CellValidating(object sender, 
        DataGridViewCellValidatingEventArgs e)
{
    if (e.ColumnIndex == comboBoxColumn.Index)
    {
        object eFV = e.FormattedValue;
        if (!comboBoxColumn.Items.Contains(eFV))
        {
            comboBoxColumn.Items.Add(eFV);
            dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = eFV;
        }
    }
}

答案 1 :(得分:0)

DataGridViewComboBoxColumn旨在从可能的值中进行选择 - 而不是用于键入数据。如果要添加任何数据,您应该以编程方式为所需的DataGridViewComboBoxCell执行此操作:

((DataGridViewComboBoxCell)dataGridView1[0,0]).Items.AddRange(new string [] {"A","B","C"});