ComboBoxCell值无效

时间:2016-03-31 12:57:28

标签: c#

我有一个绑定到BindingList的datagridview,在这个列表中我有一个绑定到列表的组合框,这是我的BindingList的属性,以便更好地理解:

  

ListA --->绑定到datagridview

     

ListA.ListB --->绑定到组合框

当我打开表单时,我可以核心设置我的组合框显示ListB中的值,但是当我添加一个新项时我得到一个错误(值无效),这里是代码:

private void dataGridView_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    ((DataGridViewComboBoxColumn)dataGridView.Columns["Names"]).DisplayIndex = 4;
    for (int i = 0; i < People.Count; i++)
    {
        var cell = (DataGridViewComboBoxCell)dataGridView.Rows[i].Cells["Names"];
        cell.DataSource = People[i].Names;
        cell.Value = People[i].Names[0];
    }
}

上面的代码效果很好,问题发生在这里:

private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if (dataGridView.CurrentCell.ColumnIndex != dataGridView.Columns["Names"].Index)
        return;
    var cell = (DataGridViewComboBoxCell)dataGridViewICAO.CurrentCell;
    if (cell.EditedFormattedValue.ToString().Equals(String.Empty)) return;
    var regex = new Regex("[a-zA-Z]");
    if (!regex.IsMatch(cell.EditedFormattedValue.ToString()))
        e.Cancel = true;
    else
    {
        People[cell.RowIndex].Names.Add(cell.EditedFormattedValue.ToString());
        cell.Value = People[cell.RowIndex].Names.Last();
        People[cell.RowIndex].Names = cell.Value.ToString();
    }
}
行代码cell.Value = People[cell.RowIndex].Names.Last();上的

我得到了异常......感谢所有人!

1 个答案:

答案 0 :(得分:0)

这就是我设置组合框的方法:

private void AddComboBox()
    {
        var comboNames = new DataGridViewComboBoxColumn { Name = "cmbNames", HeaderText = "Names" };
        dataGridView.Columns.Add(comboNames);
    }

private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dataGridView.CurrentCell.ColumnIndex == dataGridView.Columns["cmbNames"].Index)
            {
                var combo = e.Control as ComboBox;
                if (combo == null)
                    return;

                combo.DropDownStyle = ComboBoxStyle.DropDown;
            }
        }