3
votes

I am using repeater control to create a table with few rows and columns. On Repeater_ItemCommand I want to select clicked row in the code behind and store it in the session. How do I do this ?

When I click the row, my e.Item.DataItem is coming NULL. I am using <%# DataBinder.Eval(Container.DataItem, "FILE_NAME")%> to bind my values in asp.net

I cant use LINQ.

Thanks Ved

3

3 Answers

2
votes

Here is the code for the repeater

<asp:Repeater ID="Repeater1" runat="server" 
        onitemcommand="Repeater1_ItemCommand">
        <HeaderTemplate>
            <ul>
        </HeaderTemplate>
        <ItemTemplate>
        <li>
            <asp:LinkButton ID="btnDeleteComment" runat="server" Text="Delete" CommandName="DeleteComment" CommandArgument=<%#Eval("myId") %>></asp:LinkButton>
            <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "FileName")%>'></asp:Label>
            </li>
        </ItemTemplate>
        <FooterTemplate>
        </ul>
        </FooterTemplate>
    </asp:Repeater>

Here is the code for the code behind

public partial class _Default : System.Web.UI.Page
    {
        public class myObject
        {
            public string FileName { get; set; }
            public int myId { get; set; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            List<myObject> myList = new List<myObject>();
            myList.Add(new myObject {myId = 1, FileName = "one" });
            myList.Add(new myObject { myId = 2, FileName = "two" });
            myList.Add(new myObject { myId = 3, FileName = "three" });

            Repeater1.DataSource = myList;
            Repeater1.DataBind();
        }

        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            Label item = (Label)e.Item.FindControl("label1");

        }
    }
0
votes

From what i know about Repeater, it is not supposed to be used like that. Why not just use GridView and TemplateField?

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"                 
            DataKeyNames="KeyColumnName"   
            DataSourceID="SqlDataSource1">  
            <Columns>  
                <asp:TemplateField>
                     ...Same template as in repater...
                </asp:TemplateField>
            </Columns>  
        </asp:GridView> 
0
votes

You can use Buttons'/LinkButtons'/etc. CommandArgument field.

<table>
    <asp:Repeater ID="someRepeater" OnItemCommand="someRepeater_ItemCommand" runat="server">
        <HeaderTemplate>
            <tr><th>
                File Name Header
            </th></tr>                                    
        </HeaderTemplate>
        <ItemTemplate>
            <tr><td>
                <asp:LinkButton Text="File Name Item" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "FILE_NAME")%>' Style="display: block" runat="server" />
            </td></tr>
        </ItemTemplate>
    </asp:Repeater>
</table>

In code behind:

protected void someRepeater_ItemCommand(object Sender, RepeaterCommandEventArgs e)
{
    Session["FILE_NAME"] = e.CommandArgument; //Here you have your FILE_NAME
}

This is, of course, some example code.