"Значение DataGridViewComboBoxCell недопустимо." Свойство DataSource - PullRequest
1 голос
/ 04 ноября 2011

У меня есть метод, который обновляет столбец, который содержит тип 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;
}

верит, что нет нулевых значений, что ссылки хороши

Большое спасибо за любую помощь

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Я уже пытался сделать с 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;
}

Большое спасибо за помощь (IBC)

0 голосов
/ 04 ноября 2011

Перейдите сюда http://msdn.microsoft.com/en-us/library/ms132679.aspx.

Это BindingList.Попробуйте поместить данные вашего комбинированного столбца в список связывания, а затем установите источник данных комбинированного столбца в список связывания.Когда вам нужно изменить то, что находится в выпадающем списке, вместо установки источника данных столбца для другого экземпляра bindingList, попробуйте очистить все элементы вашего исходного списка привязок и добавить новые один за другим.При возникновении события listChanged списка привязок список данных должен обновляться.

Это может быть довольно хлопотно, если список привязок содержит много элементов.Возможно, вы захотите создать новый класс, который наследует от связывания, и поместить его в него:

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

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

        this.ResetBindings();
    }

Это предотвращает запуск события listaged при каждом добавлении элемента.Кажется, что ResetBindings имеет тот же эффект, что и измененный список запуска.

Вероятно, есть лучшее решение этой проблемы, но это работало для меня в прошлом.

...