2014-01-06 12 views
0

我在UpdatePanel的一個ListView無法使用ItemDataBound更改ListView中多行的背景?

 <ItemTemplate > 
      <table id="TestTable" runat="server"> 
       <tr id="TestRow" runat="server"> 
       <td id="TestData" runat="server"> 

       Name: 
       <asp:Label ID="Label1" runat="server" Text='<%# Eval("Name") %>' /> 
        <br /> 
        UserID: 
        <asp:Label ID="Label2" runat="server" Text='<%# Eval("UserID") %>' /> 
        <br /> 
        DateAndTime: 
       <asp:Label ID="Label3" runat="server" Text='<%# Eval("DateAndTime")%>' /> 

       </td> 
       </tr> 
       </table> 
    </ItemTemplate> 

我用下面的代碼根據數據庫值改變表的背景

protected void ListViewFlowTable_ItemDataBound(object sender, ListViewItemEventArgs e) 
     { 
      if(e.Item.ItemType == ListViewItemType.DataItem) 
      { 
       ListViewDataItem ItemToDisplay = (ListViewDataItem)e.Item; 
       string UserId = DataBinder.Eval(ItemToDisplay.DataItem, "UserID").ToString(); 
       if(UserId == "1") 
       { 
        HtmlTableCell newRow = (HtmlTableCell)e.Item.FindControl("TestData"); 
        newRow.BgColor = "Yellow"; 
       } 
       else if(UserId == "2") 
       { 
        HtmlTableCell newRow = (HtmlTableCell)e.Item.FindControl("TestData"); 
        newRow.BgColor = "Green"; 
       } 
      } 
     } 

用戶ID 2具有多個帖子,所以它給出了下面的錯誤,用戶ID 1只有一個帖子,顏色更改爲該行的預期。

System.NullReferenceException was unhandled by user code 
    HResult=-2147467261 
    Message=Object reference not set to an instance of an object. 
    Source=Dream 
+0

newRow爲空(Nothing)。代碼一行269沒有產生一個值。 – Brandon

+0

@Brandon我的listview是在UpdatePanel中,是一個問題? –

+0

我不確定,我對ASP.NET不太熟悉。你會想看看當它進入該函數時產生了什麼。它最有可能無法找到「TestRow」。不過我同意@paqogomez。這可能是重複的。 – Brandon

回答

0

你行:

HtmlTable newRow = (HtmlTable)e.Item.FindControl("TestRow"); 

是不是發現,控制,因此,你會得到一個NEWROW錯誤NullRef。

+1

現在,如果你能告訴他爲什麼它沒有找到控制,這將是一個答案。 – paqogomez

+0

我的listView控件在UpdatPanel中,是什麼導致了這個問題? –

+0

我想我其實可以... –

1

您有一個NullReference異常,因爲您試圖找到不存在 的控件。 確實,在e.Item中,您沒有HtmlTable對象,但您會期望得到HtmlTableRow

您應該檢查線路269,劇組修改它,從HtmlTableHtmlTableRow

ListViewDataItem ItemToDisplay = (ListViewDataItem)e.Item; 
int UserId = (int)DataBinder.Eval(ItemToDisplay.DataItem, "UserID"); 
if(UserId == 1) 
{ 
    HtmlTableRow newRow = (HtmlTableRow)e.Item.FindControl("TestRow"); 
    newRow.BgColor = "Yellow"; 
} 

由於意見(我不知道,如果你一直結果顯示在你的ListView),檢查總是如果你有Null對象,比如建議here

UPDATE

我測試你的代碼示例ASP.NET Web應用程序,它工作正常。我想那麼問題可能是你如何將數據加載到ListView中。您可以發佈您編寫的代碼以將數據加載到ListView控件中嗎?

+0

@ GeneliaD'Souza你是否解決了你的問題? –

+0

@GeneliaD'Souza在ItemTemplate中定義將在listView中顯示的表的每一行的結構。此外,在你關聯的問題中,沒有

但是。我更新了我的答案。 –

+0

請不要讀我鏈接的問題,只檢查我的問題。我試圖找到控制窗體UpdatePanel和ListView控件,我在做什麼是檢查該行中的數據的用戶ID,並根據ID我想改變行背景,請檢查我的代碼是否是錯誤的。 –