如何根据行中的数据更改listview行颜色

ind*_*nci 2 asp.net listview

根据数据库条目在asp.net的listview中运行时更改了每个行颜色, 并尝试在VB中执行相同但我得到一些无法解释的错误,如对象引用未设置为一个实例对象最有可能是这一行=>
Dim cell As HtmlTableRow = DirectCast(e.Item.FindControl("MainTableRow"),mlTableRow)

如果在VB中有更好的方法/正确的方法,请告诉我?

Protected Sub ListView2_ItemDataBound1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ListViewItemEventArgs) _
Handles ListView2.ItemDataBound
    If e.Item.ItemType = ListViewItemType.DataItem Then
        Dim dataitem As ListViewDataItem = DirectCast(e.Item, ListViewDataItem)
        Dim mstorename As String = DataBinder.Eval(dataitem.DataItem, "Store")
        If mstorename = "A1" Then
            Dim cell As HtmlTableRow = DirectCast(e.Item.FindControl("MainTableRow"), mlTableRow)
            cell.BgColor = #E0E0E0
        End If
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

DK

Vin*_*ayC 5

为此,您必须确保MainTableRowtr元素提供id 并将其标记为runat="server"ie确保您的标记(html)类似于

<ItemTemplate>
   <tr id="MainTableRow" runat="server">
   ...
Run Code Online (Sandbox Code Playgroud)

不同的(和IMO,更简单)方法将使用数据绑定表达式.例如,在您的标记中,使用

<ItemTemplate>
       <tr class='<%# GetRowStyle(Container.DataItem) #>'>
Run Code Online (Sandbox Code Playgroud)

在代码隐藏中,有一个受保护的函数来提供基于数据的CSS类(例如c#函数的例子)

protected string GetRowStyle(object item)
{
   var store = DataBinder.Eval(item, "Store");
   if (store == "A1")
   {
      return "altRow";
   }
   else
   {
     return "row";
   }
}
Run Code Online (Sandbox Code Playgroud)

最后,根据您的需要定义那些css类(row,altRow).