none
DataGridView1_CellToolTipTextNeeded当格子值为空时,未将对象引用设置到对象的实例 RRS feed

  • 问题

  • 鼠标移动到箭头位置时发生错误。Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellToolTipTextNeededEventArgs) Handles DataGridView1.CellToolTipTextNeeded
            DataGridView1.Columns("工作内容").Visible = False
            If e.RowIndex > -1 Then
                Dim dataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
                If String.IsNullOrEmpty(dataGridViewRow1.Cells("工作内容").Value.ToString()) Then
                    e.ToolTipText = "在数据库中未找到本条定额的工作内容,请参考类似定额的工作内容!"
                Else
                    e.ToolTipText = dataGridViewRow1.Cells("工作内容").Value.ToString()
                End If
            End If
        End Sub

    鼠标移动到箭头位置的空行,发生错误。

    http://hi.baidu.com/useek/blog

    2012年4月30日 10:58

答案

  • 因为最后一行并不是属于真正数据表中的物理行,只是DataGridView的额外的增加出来的。建议不对最后一行进行操作,或者取消新增行(两选一):

    1)把dataGridView的AllowUsersToAdd=false。

    2)判断当前的行是不是新增行,是的话不做任何处理:

     DataGridView1.Columns("工作内容").Visible = False
            If (e.RowIndex > -1 And e.RowIndex!=DataGridView1.NewRowIndex) Then
                Dim dataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
                If String.IsNullOrEmpty(dataGridViewRow1.Cells("工作内容").Value.ToString()) Then
                    e.ToolTipText = "在数据库中未找到本条定额的工作内容,请参考类似定额的工作内容!"
                Else
                    e.ToolTipText = dataGridViewRow1.Cells("工作内容").Value.ToString()
                End If
    Else
    e.TooltipText = "你的toolTipText" End If End Sub


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 firedream 2012年5月1日 2:08
    2012年5月1日 2:04
    版主
  • 谢谢您!我用这个方法解决了。

    Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellToolTipTextNeededEventArgs) Handles DataGridView1.CellToolTipTextNeeded
            If e.RowIndex > -1 Then
                Dim dataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
                If IsDBNull(dataGridViewRow1.Cells("工作内容").Value) Then
                    e.ToolTipText = "在数据库中未找到本条定额的工作内容,请参考类似定额的工作内容!"
                Else
                    e.ToolTipText = dataGridViewRow1.Cells("工作内容").Value
                End If
            End If
        End Sub


    http://hi.baidu.com/useek/blog

    • 已标记为答案 firedream 2012年5月1日 2:09
    2012年5月1日 2:08

全部回复

  • 因为最后一行并不是属于真正数据表中的物理行,只是DataGridView的额外的增加出来的。建议不对最后一行进行操作,或者取消新增行(两选一):

    1)把dataGridView的AllowUsersToAdd=false。

    2)判断当前的行是不是新增行,是的话不做任何处理:

     DataGridView1.Columns("工作内容").Visible = False
            If (e.RowIndex > -1 And e.RowIndex!=DataGridView1.NewRowIndex) Then
                Dim dataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
                If String.IsNullOrEmpty(dataGridViewRow1.Cells("工作内容").Value.ToString()) Then
                    e.ToolTipText = "在数据库中未找到本条定额的工作内容,请参考类似定额的工作内容!"
                Else
                    e.ToolTipText = dataGridViewRow1.Cells("工作内容").Value.ToString()
                End If
    Else
    e.TooltipText = "你的toolTipText" End If End Sub


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 firedream 2012年5月1日 2:08
    2012年5月1日 2:04
    版主
  • 谢谢您!我用这个方法解决了。

    Private Sub DataGridView1_CellToolTipTextNeeded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellToolTipTextNeededEventArgs) Handles DataGridView1.CellToolTipTextNeeded
            If e.RowIndex > -1 Then
                Dim dataGridViewRow1 As DataGridViewRow = DataGridView1.Rows(e.RowIndex)
                If IsDBNull(dataGridViewRow1.Cells("工作内容").Value) Then
                    e.ToolTipText = "在数据库中未找到本条定额的工作内容,请参考类似定额的工作内容!"
                Else
                    e.ToolTipText = dataGridViewRow1.Cells("工作内容").Value
                End If
            End If
        End Sub


    http://hi.baidu.com/useek/blog

    • 已标记为答案 firedream 2012年5月1日 2:09
    2012年5月1日 2:08