“DataGridViewComboBoxCell值无效。”属性数据源

时间:2011-11-03 23:05:52

标签: c# winforms entity-framework datagridview datagridviewcombobox

我有一个更新包含DataGridViewComboBoxCell类型的列的方法,早期的ComboBoxCell为空,选择一个产品并在添加新记录时更新ComboBoxCell,但是当我修改它时发送一个异常:     “DataGridViewComboBoxCell值无效” 如果您重新分配DataSource属性,则不会。

这里的方法:

private void CargarTipoGasto(ref DataGridViewComboBoxCell ComboColumn)
{
   ComboColumn.DataSource = from oPro in dtContext.tblProducto
                            where oPro.ProductoId == objProducto.ProductoId
                            from oMat in dtContext.tblMatrizDeCuentasGD
                            where oMat.Partida.Substring(0,3) ==
                              oPro.tblObjetoGasto.ObjetoGastoId.Substring(0,3)
                            from oTipGas in dtContext.tblTipoGasto
                            where oMat.TipoGasto == oTipGas.TipoGastoId
                            select oTipGas;

   ComboColumn.ValueMember = TIPOGASTO_ID;
   ComboColumn.DisplayMember = TIPOGASTO_VALOR;
}

verique没有空值,引用很好

非常感谢你的帮助

2 个答案:

答案 0 :(得分:2)

我已经尝试过使用BindingList并得到了相同的异常 porfin可以解决它。

返回DataSource属性以指定在索引未命中时未找到的项目,以避免此论坛仅指定DataGridView存在“DataError”的事件并留空,这确实有效但不是很好看。

如何解决这个问题就是这么简单。 (字符串为空)

private void CargarTipoGasto(ref DataGridViewComboBoxCell ComboColumn)
{
   ComboColumn.Value = string.Empty;
   ComboColumn.DataSource = from oPro in dtContext.tblProducto
                            where oPro.ProductoId == objProducto.ProductoId
                            from oMat in dtContext.tblMatrizDeCuentasGD
                            where oMat.Partida.Substring(0,3) ==
                              oPro.tblObjetoGasto.ObjetoGastoId.Substring(0,3)
                            from oTipGas in dtContext.tblTipoGasto
                            where oMat.TipoGasto == oTipGas.TipoGastoId
                            select oTipGas;

   ComboColumn.ValueMember = TIPOGASTO_ID;
   ComboColumn.DisplayMember = TIPOGASTO_VALOR;
}

非常感谢您的帮助(IBC)

答案 1 :(得分:0)

转到http://msdn.microsoft.com/en-us/library/ms132679.aspx

这是一个BindingList。尝试将combocolumn数据放入绑定列表,然后将combocolumn的数据源设置为绑定列表。当您需要更改组合框中的内容时,不要将列的数据源设置为不同的bindingList实例,请尝试清除原始绑定列表中的所有项目并逐个添加新的项目。当绑定列表的listChanged事件触发时,datagridviewcombobox应该更新。

当绑定列表包含大量项目时,这可能会有点麻烦。您可能想要创建一个继承自bindinglist的新类并将其放入其中:

public void clearAndAddList(List<T> newData)
    {
        this.Clear();

        this.RaiseListChangedEvents = false;
        foreach (var item in newData)
            this.Add(item);
        this.RaiseListChangedEvents = true;

        this.ResetBindings();
    }

这可以防止每次添加项目时触发listchanged事件。 ResetBindings似乎与触发listchanged具有相同的效果。

这个问题可能有更好的解决方案,但过去这对我有用。