Telerik radgrid 行颜色问题

Telerik radgrid row color issue

在我的代码中,我有这个 sub 来处理更改行颜色,具体取决于名为 "backorder" 的列的内容,它在 sqlserver 中是位的。 当我测试它是 True 还是 1 时,它会执行主 "IF" 代码两次,这对我的数据表来说是正确的。 2 行显示为延期交货 = True。然而,网格仍然是正常的颜色。如果我取消注释 else 代码块,则无论内容如何,​​该列中的所有单元格都是橙色的,并且执行仍然通过主 "IF" 两次。我对这种行为感到很困惑。如果是 CSS 干扰,为什么它会让橙色起作用?我已经尝试了十几种代码变体,所有发帖人都说它们应该可以工作...

请帮忙!我花了一天的大部分时间试图解开这个问题!

Protected Sub RadGrid1_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
    If TypeOf e.Item Is GridDataItem Then
        Dim item As GridDataItem = DirectCast(e.Item, GridDataItem)
        If item("backorder").Text = "True" Or item("backorder").Text = "1" Then
            item("backorder").BackColor = System.Drawing.Color.Red
        Else
            'item("backorder").BackColor = System.Drawing.Color.Orange
        End If
    End If

End Sub

可能与您进行的布尔运算有关。您已经考虑了 "True" 和 1,但还有其他的:"true" 和 -1 立即浮现在脑海中。您可以试试这个:

Protected Sub RadGrid1_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
    If TypeOf e.Item Is GridDataItem Then
        Dim item As GridDataItem = DirectCast(e.Item, GridDataItem)
        If  Convert.ToBoolean(item("backorder").Text) = True Then
            item("backorder").BackColor = System.Drawing.Color.Red
        Else
            item("backorder").BackColor = System.Drawing.Color.Orange
        End If
    End If
End Sub

这样,您就让内置的 Convert 对象处理字符串中包含的语句 "truthiness" 的繁重工作。

您的问题是 item("backorder") returns 类型为 TableCell 的对象,而不是一行。因此,当设置 item("backorder").BackColor = System.Drawing.Color.Red 时,您是在列延期交货的背景色中设置单元格,而不是整行背景色。如果 Column 延期交货不可见,您将看不到任何变化。

试试下面的代码:

Protected Sub RadGrid1_ItemDataBound(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
If TypeOf e.Item Is GridDataItem Then
     Dim item As GridDataItem = DirectCast(e.Item, GridDataItem)
     If item("backorder").Text = "True" Or item("backorder").Text = "1" Then
         item.BackColor = Drawing.Color.Red
     Else
         item.BackColor = System.Drawing.Color.Orange
     End If
End If
End Sub

这样做是检查列 'backorder',然后通过设置 GridDataItem.

的背景颜色来设置整行背景颜色

在下面 post 查看 Shinu 的回答。 Telerik Forum Post