2010-06-23 28 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事件是實現此目的的最佳方式,因爲您不必搜索控件並專門將代碼本地化爲控件而不是整個模板。

相關問題