2010-06-23 56 views
3

我必须设置LinkBut​​ton的OnClientClick属性,但我不知道此值是什么,直到LinkBut​​ton被绑定。我想,当中继器结合设置的值,但我不能锻炼如何获得“boundItem/DataContext的”价值......如何从ASP.NET中继器获取绑定项目

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

反正有没有发现什么束缚当前行项目是?

回答

5

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

this.Repeater1.ItemDataBound += Repeater1_ItemDataBound; 

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

您可以将“var dataItem = ...”部分放入if语句中,以检查它是否为Item,Header或Footer记录。例如,如果((e.Item.ItemType == ListItemType.Item)||(e.Item.ItemType == ListItemType.AlternatingItem)){...} – NotMe 2010-06-23 18:46:03

+1

“DataBinding”是正确的事件,因为他想影响直接控制'HyperLink'。这听起来像他不知道如何评估字段值以将其应用于“HyperLink”控件。 – Kelsey 2010-06-23 18:46:56

1

在MSDN Library RepeaterItemEventArgs说法有这个作为样本事件处理程序:

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

} 

(见​​)

正如你可以看到它是一个简单的演示如何访问数据项并从中获取数据。根据您的情况进行调整是一项留给读者的练习。 :)

3

我假设你正试图获得当前正在databound行的值?

你可以改变你的函数:

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的当前行正被数据绑定的值。与ItemDataBound相比,使用DataBinding事件是实现此目的的最佳方式,因为您不必搜索控件并专门将代码本地化为控件而不是整个模板。

相关问题