2011-08-12 58 views
1

我有保持在ListView我分頁控件錶行如下(部分佈局):在ListView隱藏的錶行(ItemPlaceholderID行)

<asp:ListView ID="lvOrderItems" runat="server" 
    DataSourceID="odsShoppingCart" 
    DataKeyNames="ProductNumber" 
    ItemPlaceholderID="lvItemContainer"> 
    <LayoutTemplate> 
     <table id="lvCart" runat="server"> 
      <tr id="lvHeader" runat="server"> 
      ... 
      </tr> 
      <tr id="lvItemContainer" runat="server"></tr> 
      <tr id="lvPaging" runat="server"> 
      ... 
      </tr> 
     </table> 
    </LayoutTemplate> 

在我的代碼隱藏,我處理數據綁定事件如下,我打算躲在整個lvItemContainer行有條件(現在,我只是想隱藏的行本身沒有條件):

Protected Sub lvOrderItems_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles lvOrderItems.DataBound 
    Dim lvItemContainer As HtmlTableRow = CType(lvOrderItems.FindControl("lvItemContainer"), HtmlTableRow) 
    If Not lvItemContainer Is Nothing Then 
     Response.Write("hit1") 
     lvItemContainer.Visible = False 
    End If 

    Dim lvPaging As HtmlTableRow = CType(lvOrderItems.FindControl("lvPaging"), HtmlTableRow) 
    If Not lvPaging Is Nothing Then 
     Response.Write("hit2") 
     lvPaging.Visible = False 
    End If 
End Sub 

所以,當這個運行在DataBoundhit1是NE Ver解僱了,但hit2是...任何想法這裏發生了什麼?

回答

0

而不是嘗試(不成功)調整ItemPlaceholderID容器的可見性,我設置了容器中單個行的可見性。

3

HTML純化論者不喜歡它,但這種方法的工作原理:

在OnLayoutCreated情況,請嘗試以下方法之一:

採取RUNAT =「服務器」出來的表和子行,並做到這一點:

<asp:Panel ID="pnlItemContainer" runat="server"> 
    <tr id="lvItemContainer"></tr> 
</asp:Panel> 

pnlItemContainer.Visible = false; 

或者,你可以這樣做:

<tr id="lvItemContainer" runat="server"></tr> 

編輯:嵌入樣式元素,因爲設置可見爲false在佈局模板中不起作用。

lvItemContainer.Style["display"] = "none"; 

我不確定它如何與佈局模板一起工作,但它在其他情況下適用於我。

+0

ListView很震驚,它期望一個TableRow ...'類型'System.Web.UI.WebControls.Panel'的值無法轉換爲'System.Web.UI.HtmlControls.HtmlTableRow'' –

+0

採取runat = 「服務器」不在表聲明(和子元素)中,或者只是將該行的可見性設置爲false,因爲它已在服務器級別運行。 –

+0

我已經從代碼隱藏中設置了'Visible = False',但沒有運氣。在閱讀關於ListView控件的更多信息時,它看起來像ListView用實際項目本身替換了「ItemPlaceholderID」內容......所以也許在構建ListView時,被替換爲行,這將解釋爲什麼設置不可見不起作用(因爲它不是最終控制的一部分?) –