代码之家  ›  专栏  ›  技术社区  ›  Tim Reddy

DataGridViewComboBox-如何允许任何值?

  •  7
  • Tim Reddy  · 技术社区  · 15 年前

    我在使用VisualStudio 2010 C WinForms时遇到一些问题。

    我创建了一个DataGridView,其中有一个类型为DataGridViewComboBoxColumn的未绑定列。该列工作正常,除了与普通组合框不同,我似乎不能只输入任何值。我必须从列表中选择一个值。

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

    谢谢!

    2 回复  |  直到 13 年前
        1
  •  10
  •   Ryan Lundy    13 年前

    我不认为有什么财产可以允许这样做,但我找到了一个答案 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;
            }
        }
    }
    
        2
  •  0
  •   Przemysław Michalski    15 年前

    DataGridViewComboBoxColumn是为从可能的值中选择而设计的,而不是为键入数据而设计的。如果要添加任何数据,应以编程方式为所需的DataGridViewComboBoxCell添加:

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