如何在代码后面的转发器控件中获得完整行?

时间:2012-09-06 20:02:29

标签: c# asp.net .net repeater

我正在使用转发器控件来创建一个包含很少行和列的表。在Repeater_ItemCommand上我想在后面的代码中选择单击的行并将其存储在会话中。我该怎么做?

当我单击该行时,我的e.Item.DataItem将变为NULL。我正在使用<%#DataBinder.Eval(Container.DataItem,“FILE_NAME”)%>在asp.net中绑定我的值

我不能使用LINQ。

由于 VED

3 个答案:

答案 0 :(得分:2)

以下是转发器的代码

<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>

以下是

背后代码的代码
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");

        }
    }

答案 1 :(得分:0)

根据我对Repeater的了解,不应该像那样使用它。为什么不直接使用GridView和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> 

答案 2 :(得分:0)

您可以使用按钮'/ LinkBut​​tons'/ etc。 CommandArgument字段。

<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>

在代码背后:

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

这当然是一些示例代码。