访问ListView InsertItemTemplate中的控件

时间:2013-02-07 06:17:39

标签: c# asp.net

我在listview中有一个LinkBut​​ton InsertItemTemplate。我希望从代码背后设置谁的可见性。我正在使用此代码,但似乎在应用断点时控件未到达InsertItemTemplate。它只停留在ItemTemplate中。

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["UserId"].ToString() == Request.QueryString["Id"].ToString())
    {

        foreach (ListViewItem item in lvAlbums.InsertItem.Items)
        {
            LinkButton linkButton = item.FindControl("LinkButton1") as LinkButton;
            if (linkButton != null)
                linkButton.Visible = false;
        }
    }
}

源代码:

<form id="form1" runat="server">
    <asp:ListView ID="lvAlbums" runat="server"
            DataSourceID="SqlDataSource1" GroupItemCount="3" 
            InsertItemPosition="LastItem">            
            <LayoutTemplate>                
                    <table border="1">
                       <tr ID="groupPlaceholder" runat="server">
                       </tr>
                    </table>                       
            </LayoutTemplate>                                              
            <GroupTemplate>
                    <tr>
                        <td ID="itemPlaceholder" runat="server">
                        </td>
                    </tr>
             </GroupTemplate>             
             <ItemTemplate>
                    <td id="Td3" width="150px" height="150px" align="center" style="background-color: #e8e8e8;color: #333333;">
                    <asp:HiddenField ID="hfPhotoID" runat="server" Value='<%# Eval("DefaultPhotID") %>' />
                    <a href='<%# "Photos.aspx?AlbumID="+Eval("AlbumID") %>'> 
                    <asp:Image CssClass="Timg" runat="server" ID="imPhoto" ImageUrl='<%# "ThumbNail.ashx?ImURL="+Eval("Photo") %>' />
                    </a>
                    <br />                    
                    <b><asp:Label ID="lblAlbumName" runat="server" Text='<%# Eval("AlbumName") %>'></asp:Label>   </b>
                    </td>                
                </ItemTemplate>

                <InsertItemTemplate>
                <td id="Td3" width="150px" height="150px" runat="server" align="center" style="background-color: #e8e8e8;color: #333333;">
                    <asp:LinkButton ID="LinkButton1" runat="server" PostBackUrl="~/CreateAlbum.aspx"> Create New Album1</asp:LinkButton>
             <%--   <a href="CreateAlbum.aspx" id="createalbumlink" runat="server">                    
                    Create New Album
                </a>--%>
                </td>              
                </InsertItemTemplate>             
            </asp:ListView>

        &nbsp;<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:SLIITComDBConnectionString %>" 

        SelectCommand="SELECT Album.AlbumID, Album.DefaultPhotID, Album.AlbumName, PhotAlbum.Photo FROM Album INNER JOIN PhotAlbum ON Album.DefaultPhotID = PhotAlbum.PhotoID where album.userid=@userid">
       <SelectParameters>
       <asp:QueryStringParameter Name="userid" Type="int32"  QueryStringField="id" />

         <%--<asp:SessionParameter Name="userid" Type="String"  SessionField="UserId" />--%>
</SelectParameters>
        </asp:SqlDataSource>
    </form>

1 个答案:

答案 0 :(得分:0)

<击> 访问并修改ItemDataBound中listview的ItemTemplate中的LinkBut​​ton,而不是page_load

protected void ContactsListView_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    Label EmailAddressLabel;
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        LinkButton linkButton = e.item.FindControl("LinkButton1") as LinkButton;
        if (linkButton != null)
            linkButton.Visible = false;
    }
}

<击>

根据评论

修改。您可以在Page_Load上隐藏其中的InsertItem或控件。

隐藏InsertItem模板中的特定控件


当您尝试隐藏InsertItemTemplate中的所有项时,您可以使用FindControl访问InsertItem模板并在其中查找控件。您在InsertItem模板中具有标识为LinkButton1的LinkBut​​ton,您可以通过首先在InsertItem中找到它来隐藏它

((LinkButton)lvAlbums.InsertItem.FindControl("LinkButton1")).Visible = false;

隐藏整个InsertItem模板


您可以使用InsertItem InsertItem属性完全隐藏Visible模板。

lvAlbums.InsertItem.Visible = false;