2011-05-09 53 views
2

我跟着這個問題stuck on changing each row color during run-time in listview in asp.net based on database entries並試圖在VB中做同樣的事情,但我得到了一些無法解釋的錯誤,例如對象引用未設置爲對象的實例 最有可能此行=>
昏暗的細胞作爲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

回答

5

對於這個工作,你必須確保你提供MainTableRow ID來tr元素,並將其標記爲runat="server"即確保您的加價(HTML)是一樣的東西

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

不同的(和IMO,更簡單)方法將使用數據綁定表達式。例如,在您的標記,使用

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

而在後臺代碼,有保護功能,提供基於數據(例如C#功能會)CSS類

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

最後,根據需要定義這些css類(row,altRow)。

+1

感謝維奈,這個工作 – indavinci 2011-08-21 06:48:40

2

並且根本沒有任何代碼。

我只是增加了一個領域稱爲狀態 的SQL例如

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> 
相關問題