3

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

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

我不能使用 LINQ。

谢谢韦德

4

3 回答 3

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");

        }
    }
于 2012-09-06T20:39:50.183 回答
0

您可以使用 Buttons'/LinkBut​​tons'/等。命令参数字段。

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

当然,这是一些示例代码。

于 2012-09-06T20:37:24.660 回答
0

根据我对中继器的了解,它不应该那样使用。为什么不直接使用 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> 
于 2012-09-06T20:27:28.320 回答