基于单元格VB.NET中的字符串更改datagridview中的行属性

基于单元格VB.NET中的字符串更改datagridview中的行属性,vb.net,datagridview,properties,row,Vb.net,Datagridview,Properties,Row,我目前在VB.NET visual express 2013中工作。我在后端使用sql数据库,并在Windows窗体中编程。我正在尝试获取一些代码来搜索我的多列datagridview的第9列,并搜索单词“tailshelf”。这个单词前后都有一堆字符,但我需要我的代码来识别这个字符串,并将整行的背景颜色更改为橙色。我有一些代码正在尝试,但它向我抛出了一个错误,上面写着“System.InvaliudCastException:从字符串到integer类型的转换无效”。它似乎在说它正在尝试将整数

我目前在VB.NET visual express 2013中工作。我在后端使用sql数据库,并在Windows窗体中编程。我正在尝试获取一些代码来搜索我的多列datagridview的第9列,并搜索单词“tailshelf”。这个单词前后都有一堆字符,但我需要我的代码来识别这个字符串,并将整行的背景颜色更改为橙色。我有一些代码正在尝试,但它向我抛出了一个错误,上面写着“System.InvaliudCastException:从字符串到integer类型的转换无效”。它似乎在说它正在尝试将整数转换为字符串,但该列应设置为varchar数据类型。这是我的密码: 私有子DGVSchedule_RowPostPaint(发送方作为对象,e作为DataGridViewRowPostPaintEventArgs)处理DGVSchedule.RowPostPaint

    Try

        'change row color to look for tailshelf
        If e.RowIndex < Me.DGVSchedule.RowCount - 1 Then
            Dim dgvrow As DataGridViewRow = Me.DGVSchedule.Rows(e.RowIndex)

            If dgvrow.Cells(9).ToString.Contains("Tailshelf") Then
                dgvrow.DefaultCellStyle.BackColor = Color.Orange
            Else
                dgvrow.DefaultCellStyle.BackColor() = Color.White
            End If

        End If


    Catch ex As Exception
        MsgBox(ex.ToString)
    End Try
End Sub

阅读那行代码,你的问题就在那里。您将获取dgvrow.Cells(9).Value,将其转换为字符串,然后将其结果转换为整数。然后尝试将整数值与“Tailshelf”进行比较。很可能您有正确的单元格索引,假设dgvrow.Cells(9)中的值实际上是“Tailshelf”。CInt(“Tailshelf”)将失败。删除整数转换。

如果要尝试在列索引9中搜索此单词
Tailshelf
,请使用此选项

If (dgvrow.Cells(9).ToString.Contains("Tailshelf")) Then

是的,我检查了单元格索引,它是正确的。我试着把“.value”移到它原来的位置。tostring,但仍然不起作用。我从这个网站上的另一个帖子中得到了这个代码。考虑到我正在寻找一个字符串,我需要对此进行更改?如果dgvrow.Cells(9).Value.ToString=“Tailshelf”那么dgvrow.Cells(9)将为您获取索引9处单元格的引用,该单元格将是DvGridViewCell对象。您必须访问该对象的Value属性,将其强制转换为字符串,并将结果与您正在搜索的内容进行比较。我已经更新了代码,它现在运行,但它不会更改行颜色,它是否与我放置它的事件有关?我应该把它放在我的表单加载事件中吗?请检查更新的代码。正如piyush在上面的评论中提到的,如果dgvrow.Cells(9).Value.ToString.Contains(“Tailshelf”),请尝试
,并记住字符串比较区分大小写。在vb.net中有一个空格“*Tailshelf*”,请删除它不是*通配符。我在一个描述中搜索“tailshelf”这个词,这个词前后都有许多其他字符。不,你做得不对,如果你用通配符搜索,请使用String.contains vb.net中的通配符命令是什么?好的,我添加了这一行,但是我的代码运行了,它仍然不会更改我的行颜色,我是否应该将dgv的事件更改为其他事件?请参见编辑的代码尝试使用CellFormatting事件或RowsAdded事件遵循此操作,我刚刚尝试使用CellFormatting事件,但它不起作用,也不适用于RowsAdded事件。
If CInt(dgvrow.Cells(9).Value.ToString) = "*Tailshelf*" Then
If (dgvrow.Cells(9).ToString.Contains("Tailshelf")) Then
With DGVSchedule
        For gridrow As Integer = 0 To .RowCount - 1
            If .Rows(gridrow).Cells(9).Value.ToString.Contains("TAILSHELF") Then
                .Rows(gridrow).DefaultCellStyle.BackColor = Color.Orange
            End If
        Next
    End With