2015-08-07 2 views
0

Это программа форм Windows. У меня есть несвязанный элемент управления DataGridView с четырьмя столбцами; Идентификатор функции как строка, Parts as string, Flats as string и ShowOnEst как boolean. Столбцы были определены в конструкторе форм, а булевский столбец действительно установлен как флажок с тристатом, установленным на false.Unbound DataGridView добавить строку с ошибкой флажка

Пользователь выбирает продукт из списка и этот код выполняется для заполнения сетки

grdFeat.Rows.Clear() 
For i = 0 To curProduct.lstFeatures.Count - 1 
    With (curProduct.lstFeatures(i)) 
     grdFeat.Rows.Add(.FeatureId, .Parts, .Flats, .ShowOnEst) 
    End With 
Next 

Если AllowUserToAddRows ложно, Everthing хорошо. Установка AllowUserToAddRows истинно, однако, приводит к следующей ошибке:

FormatException

Значение «» не может быть преобразовано в тип «Boolean».

Ошибка не активирована в моем коде. Он отображается в новой вкладке «Без источника».

Кажется довольно понятным, что процесс, который добавляет новую строку редактирования, пытается установить флажок в значение строки или, возможно, значение NULL. Я очень новый (несколько месяцев) на vb.net, поэтому я подозреваю, что где-то я пропустил какую-то простую настройку, но после нескольких часов попыток найти его, я начинаю чувствовать себя немного глупо.

Я бы дал вам список вещей, которые я уже пробовал, но он длинный. :) Я даже попытался обойти проблему, добавив новую строку вручную, .add ("", "", "", False), но это тоже дает ту же ошибку, хотя я говорю ей, что поставить в флажке.

Что мне не хватает? Кроме того, может ли кто-нибудь указать мне на объяснение того, как работает эта новая строка редактирования?

+0

Вы обрабатываете событие DefaultValuesNeeded? – Graffito

+0

Да, я добавил код для этого и CellValueNeeded точно так же, как эксперимент. Ошибка произошла до начала любого из событий. Мой смысл в документации состоит в том, что эти события полезны в виртуальном режиме, но стоило попробовать. Я тоже пытался включить виртуальный режим, но тот же. – JimmyTheGeek

+0

Для целей идентификации проблемы вы можете попробовать еще раз предлагаемое обходное решение, то есть «установите AllowUserToAddRows в значение false перед заполнением DataGridView и установите значение true после», но вставьте «Application.DoEvents()» перед «grdFeat.AllowUserToAddRows = true», , Другое испытание: вместо DoEvents(), do grdFeat.Invalidate(). – Graffito

ответ

1

Из того, что вы объяснили, у меня нет реального объяснения проблемы.

Обходной путь может заключаться в том, чтобы установить AllowUserToAddRows в значение false перед заполнением DataGridView и установить значение true после.

+0

Спасибо за идею. Я устал от этого, но без радости. К счастью, я нашел ответ. Смотри ниже. – JimmyTheGeek

0

Найдено. Надеюсь, это поможет кому-то еще ...

Добавляемые строки являются незафиксированными строками. Чтобы решить эту проблему, захват строки добавляется индекс, установите текущую ячейку и сообщить, что добавленная строка загрязнен:

grdFeat.Rows.Clear() 
For i = 0 To curProduct.lstFeatures.Count - 1 
    With (curProduct.lstFeatures(i)) 
     Dim p = grdFeat.Rows.Add(.FeatureId, .Parts, .Flats, .ShowOnEst) 
    End With 
    grdFeat.CurrentCell = grdFeat.Rows(p).Cells(0) 
    grdFeat.NotifyCurrentCellDirty(True) 
Next 

Ну, с дальнейшими экспериментами, это не полное исправление. Проблема все еще существует, но по крайней мере теперь обработка события DataError позволяет мне что-то с этим делать в коде. Без этих строк ошибка возникает до запуска события DataError.

Все еще озадачены.

Смежные вопросы