1

我有一個方法,更新包含類型DataGridViewComboBoxCell的列,早期ComboBoxCell爲空,選擇產品和ComboBoxCell更新時添加新記錄做得很好,但當我修改它發送異常: 「 DataGridViewComboBoxCell值無效「 如果您在重新分配DataSource屬性時不適用。「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

我已經嘗試使用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)

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具有相同的效果。

可能有更好的解決方案來解決這個問題,但是這在過去對我有用。