2011-12-21 2 views
2

Я использую winforms и C# ,.Как остановить исключение ссылочной ссылки при определении значения флажка datagridview?

enter image description here

Когда я пытаюсь получить datagridviewcheckbox состояние, если флажок не верно, то это показывает «Null Reference Exception был пойман» в качестве исключения.

Мой код

foreach (DataGridViewRow fees_row in this.dataGridView2.Rows) 
{ 
    if ((bool) fees_row.Cells[0].Value == true) 
    { 
    } 
} 

Ошибка в строке:

if ((bool) fees_row.Cells[0].Value == true) 

как установить DataGridView значение флажок не равно нулю. или избежать этого исключения.

+0

Где вы пишете этот цикл, я сильно подозреваю, что может быть выбор не было совершено, вы можете попробовать использовать 'EditedFormatedValue' вместо' value'? – V4Vendetta

ответ

5

Вы должны убедиться, что DataGridViewCell объект не nullпервый, прежде чем пытаться допрашивать его значение. Это то, что вызывает NullReferenceException - вы допрашиваете объект Value объекта null!

Изменить код выглядеть следующим образом:

foreach (DataGridViewRow fees_row in this.dataGridView2.Rows) 
{ 
    var cell = fees_row.Cells[0]; 
    if (cell != null) 
    { 
     var value = cell.Value; 
     if (value != null && (bool)value == true) 
     { 
      // Do whatever... 
     } 
    } 
} 

Но прежде чем кто-то оставляет придирчивый комментарий, нет вообще никакой причины, чтобы проверить логическое значение против буквального true. Все, что вы должны написать это if (boolValue)

+1

не забудьте проверить, является ли '.Value! = Null' (потому что' Value' имеет тип 'object') – Matten

+0

@Matten: Хорошая точка; Я забыл, что эти вещи еще не были сильно набраны ... –

+0

Незначительная точка: может быть лучше сделать трансляцию с помощью оператора «as» на cell.Value перед оператором if. Затем проверьте, не является ли оно нулевым и истинным. Это остановит запуск InvalidCastExceptions. –

2
if (fees_row.Cells[0].Value != null) 
{ 
    if ((bool) fees_row.Cells[0].Value == true) 
       { 
       } 
    } 
+0

Спасибо другу .. – Sagotharan

1
foreach (DataGridViewRow fees_row in this.dataGridView2.Rows) 
{ 
    var cell = fees_row.Cells[0]; 
    if (cell.value != null) 
    { 
     var value = cell.Value; 
     if (value != null && (bool)value == true) 
     { 
      // Do whatever... 
     } 
    } 
} 
+0

спасибо ragavan ,. тот же самый код серый говорит в верхней части. – Sagotharan

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