DataGridViewComboBoxCell值无效."属性数据源

本文关键字:属性 数据源 quot 无效 DataGridViewComboBoxCell | 更新日期: 2023-09-27 18:13:33

我有一个方法,更新包含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;
}

检查没有空值,引用是否正常

非常感谢您的帮助

DataGridViewComboBoxCell值无效."属性数据源

我已经尝试过使用BindingList并得到了相同的异常Porfin可以解决这个问题

返回DataSource属性来指定要选择的项目,在索引缺失中没有找到,在那里,为了避免这个论坛,只指定有"DataError"到DataGridView的事件,并让您留空,这确实有效,但不是很清楚。

如何解决它是这个简单的方法。(字符串为空)

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;
}

Thank you very much for the help (IBC)

点击这里http://msdn.microsoft.com/en-us/library/ms132679.aspx.

这是一个绑定列表。尝试将组合列数据放入绑定列表中,然后将组合列的数据源设置为绑定列表。当您需要更改组合框中的内容时,不要将列的数据源设置为不同的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有相同的效果。

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