NullReferenceException修复?

时间:2014-03-14 18:51:27

标签: vb.net nullreferenceexception

我是vb.net的新手,我知道我还有很多需要学习的东西。研究和大量的示例代码可以帮助我提高我的编程技能,但是还有很多东西要被混淆。

这是我刚刚遇到的错误。

Dim drv As DataRowView
    If e.RowIndex >= 0 Then
        If e.RowIndex <= ds.Tables("entrancequestion").Rows.Count - 1 ***Then***
                                                                          'Object reference not set to an instance of an object.
            drv = ds.Tables("entrancequestion").DefaultView.Item(e.RowIndex)
            Dim c As Color
            If drv.Item("TimesAnswered").Value <= (Convert.ToDouble(lblappcount.Text) * 0.2) Then

                c = Color.Yellow
            ElseIf drv.Item("TimesAnswered").Value >= (Convert.ToDouble(lblappcount.Text) * 0.8) Then
                c = Color.Red
            Else
                c = Color.Black
            End If
            e.CellStyle.ForeColor = c
        End If
    End If

这是在DataGridView.Cellformatting事件下编写的。 基本上我只是想在这些条件下更改datagridview上的行文本颜色。

    如果“TimesAnswered”小于或等于lblappcount.text上值的20%,
  1. 行forecolor会变为黄色。
  2. 行forecolor更改为redif“TimesAnswered”在lblappcount.text上小于或等于80%的值。
  3. 如果不满足上述条件,
  4. 和颜色行。
  5. 任何建议都非常感谢。

2 个答案:

答案 0 :(得分:2)

ds为空或者不包含名为 entrancequestion 的表。

在这里使用一点Assert魔法:

Debug.Assert(ds IsNot Nothing)

Dim tblEntranceQuestion As DataTable = ds.Tables("entrancequestion")

Debug.Assert(tblEntranceQuestion IsNot Nothing)

If e.RowIndex <= tblEntranceQuestion.Rows.Count - 1
    (...)

答案 1 :(得分:0)

知道了。这就是我的所作所为。在Cell格式化事件下,我写了这个。

  For i As Integer = 0 To EntranceQuestionDataGridView.Rows.Count - 1
        If EntranceQuestionDataGridView.Rows(i).Cells(10).Value <= (Convert.ToDouble(lblappcount.Text) * 0.2) And EntranceQuestionDataGridView.Rows(i).Cells(10).Value > 0 Then
            EntranceQuestionDataGridView.Rows(i).DefaultCellStyle.BackColor = Color.Red
        ElseIf EntranceQuestionDataGridView.Rows(i).Cells(10).Value >= (Convert.ToDouble(lblappcount.Text) * 0.8) Then
            EntranceQuestionDataGridView.Rows(i).DefaultCellStyle.BackColor = Color.Yellow
        Else
            EntranceQuestionDataGridView.Rows(i).DefaultCellStyle.BackColor = Color.White
        End If
    Next
无论如何,谢谢你们。我学到了很多东西:)