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

时间:2011-05-09 06:02:20

标签: asp.net listview

我按照这个问题stuck on changing each row color during run-time in listview in asp.net based on database entries尝试在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

非常感谢你的帮助。

DK

3 个答案:

答案 0 :(得分:5)

为此,您必须确保向MainTableRow元素提供tr ID,并将其标记为runat="server",即确保您的标记(html)类似于

<ItemTemplate>
   <tr id="MainTableRow" runat="server">
   ...

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

<ItemTemplate>
       <tr class='<%# GetRowStyle(Container.DataItem) #>'>

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

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

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

答案 1 :(得分:2)

并且根本没有任何代码。

我刚刚在SQL中添加了一个名为status的字段 例如

select given, surname, case when owing > 1000 then 'Behind' else 'OK' end as Status from cust

然后在页面

                <ItemTemplate>
                <tr class='<%# Eval("Status") %>' style="">

    <style type="text/css">

    .behind
    {    
         font-style :italic ;
         color: black  ;
    }
    .ok
    {    
         color: grey  ;
    }

</style>

答案 2 :(得分:0)

我知道这很旧,但是如果有人在寻找没有css的内联(就像我以前一样),这就是我的解决方案:

db列“ Priority”包含0、1,2等。并且我想根据以下内容将列表行涂成红色,蓝色,绿色:

<ItemTemplate>
            <div style='<%# color:" + mylistof_PRIORITYCOLORS[Convert.ToInt16(Eval("Priority"))] %>'>

和您定义的列表

public static List<string> mylistof_PRIORITYCOLORS = new List<string> { "Red", "Blue", "Green" };