Salvatore
Salvatore

Reputation: 31

Accessing a button in a repeater from Code Behind (C#)

I am finding some serious problems in accessing a button placed in a repeater from code behind.

This is the repeater code:

  <asp:Repeater ID="Repeater1" runat="server">

                    <HeaderTemplate></HeaderTemplate>
                    <ItemTemplate>
                        <table>
                            <tr>
                                <td>Username:</td>
                                <td> <%# Eval("UserName") %></td>
                            </tr>
                            <tr>
                                <td>Date:</td>
                                <td><%# Eval("CommentTime") %></td>
                            </tr>
                            <tr>
                                <td>Comment:</td>
                                <td><%# Eval("Comment") %></td>
                            </tr>
                            <tr>
                                <td>
                                    <asp:Button ID="btnDeleteComment" runat="server" Text="Delete" /></td>
                            </tr>
                        </table>
                        <br />
                    </ItemTemplate>

                </asp:Repeater>

And This is the code Behind placed int the page load:

  Button btn = new Button();
                    btn = (Button)Repeater1.FindControl("btnDeleteComment");
                    btn.Visible = false;

Am I missing something?

Thanks

Upvotes: 3

Views: 4128

Answers (3)

Muhammad Akhtar
Muhammad Akhtar

Reputation: 52241

I am sure, I've solved your problem as to why you are getting the object reference not set.

As you have this conditional statement, if (e.Item.ItemType == ListItemType.Item), when its first iterates it will be a header item type. Since your your button is in the item template, that's doesn't exist in the Header template.

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
  if (e.Item.ItemType == ListItemType.Item)
    {
     Button btn = new Button(); 
     btn = (Button)e.Item.FindControl("btnDeleteComment"); 
     btn.Visible = false; 
    }
}

Upvotes: 3

Govind Malviya
Govind Malviya

Reputation: 13743

on .aspx

    <asp:Button ID="btnDeleteComment" runat="server" Text="Delete" Visible='<# IsAuthor?"true":"false" >' />

in code behind

//global  scope  
public bool IsAuthor=false;

//in pageload event

IsAuthor= GetIsAuthor();

Upvotes: 0

Ankur
Ankur

Reputation: 33637

You can't find the control like this. What you need to do is attach an event to repeater "item data bound event" and in that event handler do:

(Button)e.Item.FindControl("btnDeleteComment");

Upvotes: 0

Related Questions