如何在转发器的按钮单击事件处理程序中获取绑定对象?

Bur*_*jua 1 c# asp.net data-binding repeater

我有一个转发器并绑定一个对象列表,如下所示:

List<MyClass> myList = //....
MyRepeater.DataSource = myList;
MyRepeater.DataBind();
Run Code Online (Sandbox Code Playgroud)

在转发器内部,我有一个链接按钮,由此处理程序处理:

protected void Button_ItemCommand(object source, RepeaterCommandEventArgs e) {
    if (e.CommandName == "Edit") {
        // I need to get my listItem.Id here
    }
}
Run Code Online (Sandbox Code Playgroud)

它应该很容易,但我找不到如何做到这一点.

谢谢.

Ada*_*kis 5

如果你想要点击的实际链接按钮,那么它已经在object source参数中传递给了这个方法- 只需适当地投射它.

LinkButton lb = source as LinkButton;
Run Code Online (Sandbox Code Playgroud)

如果你想要你的转发器中的其他控件,你可以使用

Button randomButton = e.Item.FindControl("buttonId") as Button;
Run Code Online (Sandbox Code Playgroud)

编辑

如果你想要一个属于该行所绑定的对象的属性,这将是一件痛苦的事情,而且它会很难看.您需要在Session或ViewState中跨越回发来保留转发器绑定的DataSource.一旦这样做,您可以通过将其索引与单击的reeater行的索引相匹配来访问源中的相应对象,您可以通过以下方式获取该对象:

e.Item.ItemIndex
Run Code Online (Sandbox Code Playgroud)

请注意,最简单的方法是将此值存储在转发器中的某个位置.