我按照这个问题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
答案 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" };