2010-06-23 3 views
3

LinkButton의 OnClientClick 특성을 설정해야하지만 LinkButton이 바인딩 될 때까지이 값이 무엇인지 알 수 없습니다. 나는 리피터 바인딩 할 때 값을 설정하기 위해 노력하고있어,하지만 난하지 어떻게 'boundItem/데이터 컨텍스트'값을 얻는 방법 운동 ...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 = ..."부분을 Item, Header 또는 Footer 레코드인지 여부를 확인하는 if 문 안에 넣을 수 있습니다. 예를 들어, ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem) {...} – NotMe

+1

'DataBinding'은 영향을주기 위해 올바른 이벤트입니다. 직접 '하이퍼 링크'컨트롤. 필드 값을 'HyperLink'컨트롤에 적용하는 방법을 알지 못하는 것 같습니다. – Kelsey

1

은 MSDN 라이브러리를 가지고 RepeaterItemEventArgs 인수를 제공 한이 샘플 이벤트 핸들러로 : 당신이 간단한 예제입니다 볼 수 있듯이

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 참조) 데이터 항목에 액세스하고 데이터 항목에서 데이터를 가져 오는 방법에 대해 설명합니다. 이것을 시나리오에 적용하는 것은 독자에게 남겨진 과제입니다. :)

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에 비해이 작업을 수행하는 가장 좋은 방법은 컨트롤을 검색하고 전체 템플릿 대신 컨트롤에 코드를 구체적으로 지역화 할 필요가 없기 때문입니다.

관련 문제