如何从ASP.NET转发器中获取绑定项

时间:2010-06-23 12:18:58

标签: c# asp.net data-binding repeater

我必须设置一个LinkBut​​ton的OnClientClick属性,但在LinkBut​​ton绑定之前我不知道这个值是什么。我试图在转发器绑定时设置值,但我无法训练如何获取'boundItem / dataContext'值......

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:LinkButton  Text="HelloWorld" ID="Hyper1" runat="server" OnDataBinding="Repeater1_DataBinding" >
        </asp:LinkButton> 
    </ItemTemplate> 
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{
    var list = new List<TestObject>();
    list.Add(new TestObject() {TestValue = "testing1"});
    list.Add(new TestObject() { TestValue = "testing2" });
    list.Add(new TestObject() { TestValue = "testing3" });

    this.Repeater1.DataSource = list;
    this.Repeater1.DataBind();
}

public void Repeater1_DataBinding(object sender, EventArgs e)
{
    var link = sender as HyperLink;
    //link.DataItem ???
}

无论如何都要找出当前行绑定项目是什么?

3 个答案:

答案 0 :(得分:5)

也许你需要使用ItemDataBound事件。它提供了具有DataItem可用的RepeaterItemEventArgs参数

this.Repeater1.ItemDataBound += Repeater1_ItemDataBound;

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var dataItem = e.Item.DataItem;
}

答案 1 :(得分:3)

我假设您正在尝试获取当前正在数据绑定的行的值?

您可以将功能更改为:

public void Repeater1_DataBinding(object sender, EventArgs e) 
{ 
    var link = sender as HyperLink;
    string valueYouWant = Eval("TestValue").ToString();

    // You could then assign the HyperLink control to whatever you need
    link.Target = string.Format("yourpage.aspx?id={0}", valueYouWant);
} 

valueYouWant现在具有正在数据绑定的当前行的字段TestValue的值。与DataBinding相比,使用ItemDataBound事件是执行此操作的最佳方式,因为您不必搜索控件并专门将代码本地化到控件而不是整个模板。

答案 2 :(得分:1)

MSDN库将此作为示例事件处理程序:

public void BindData(object sender, EventArgs e)
{
    Literal l = (Literal) sender;
    DataGridItem container = (DataGridItem) l.NamingContainer;
    l.Text = ((DataRowView) container.DataItem)[column].ToString();

}

(见http://msdn.microsoft.com/en-us/library/system.web.ui.control.databinding.aspx

正如您所看到的,它是一个简单的演示,说明如何访问数据项并从中获取数据。将此调整到您的场景是一个留给读者的练习。 :)