2011-06-07 93 views
2

如果沒有任何意義,您將不得不原諒我,因爲我仍然是非常新的ASP.NET的。我有一個任意長的物品列表(假設它是一個Person類型的列表),我已經想出瞭如何綁定到一個Repeater控件並顯示物品的屬性(例如人物的名字)。將對象綁定到控件上

我很想知道的是,我可以怎樣「結合」各個部分,並知道數據從服務器端返回的位置(可能沒有意義,我會再試一次)。 從下面的代碼中,當用戶點擊一個LinkBut​​ton和一個Person的名字時,HelloHandler將運行。但我怎麼知道這個名稱是鏈接在頁面上與邏輯關聯的?我怎樣才能「獲得」他們的名字?

ASPX

<asp:Repeater ID="Queue" runat="server"> 
<ItemTemplate> 
    <div> 
    <%# Eval("Name") %><br /> 
    <asp:LinkButton runat="server" Text="Say Hello" OnClick="HelloHandler"></asp:LinkButton> 
    </div> 
</ItemTemplate> 
</asp:Repeater> 

CS

public List<Person> People = new List<Person>(); 

protected void Page_Load(object sender, EventArgs e){ 

People.Add(new Person("Albert")); 
People.Add(new Person("Bradley")); 
People.Add(new Person("Chad")); 
//etc... 

Queue.DataSource = People; 
Queue.DataBind(); 

} 

public void HelloHandler(object sender, EventArgs e){ 
//? 
} 

編輯

爲了澄清,我希望能夠回到相應的Person對象的列表來自事件處理程序。

回答

1

我想我知道你後,下面的代碼將允許您從點擊一個鏈接按鈕從中繼器刪除項目。

編輯:作爲對評論的迴應,我更改了代碼以顯示如何將ID傳遞迴命令事件。

您的頂線更改爲

<asp:Repeater ID="Queue" runat="server" ItemCommand="rpt_ItemCommand"> 

和下面一行到你的鏈接按鈕

<asp:LinkButton id="lbDelete" runat="server" Text="[Delete]" CommandName="delete"></asp:LinkButton> 

然後添加以下在你的CS

爲了得到repeater項目的ID ,你CommandArgument,在數據綁定期間設置ID。

protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
     { 
      var lbDelete = (LinkButton)e.Item.FindControl("lbDelete"); 
      lbDelete.CommandArgument = retailItem.Id.ToString(); 
    } 
} 

protected void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) 
{ 
    if (e.CommandName == "delete") 
     { 
      LinkButton btn = e.CommandSource as LinkButton; 

      if (btn != null) 
      { 
       var itemID = (string)e.CommandArgument; 

       //Do Stuff 
      } 
     } 
} 

這將意味着當您單擊轉發按鈕,你現在在代碼這一事件背後的火..

+0

我試過了,但我需要引用回到列表中的對象。我確實想出了一個基於你在那裏的解決方案。我現在將它發佈。 – daniel 2011-06-07 18:02:11

+0

現在的答案顯示如何將物品ID傳遞迴代碼 – TheAlbear 2011-08-01 10:25:03

2

在這種情況下,您將使用LinkButton.CommandArgument屬性。您可以使用某些數據爲每個LinkBut​​ton設置數據,然後在調用按鈕事件處理程序時將該數據拉出。

+0

我可能給出了一個不好的例子。當我說我想要這個名字時,我的意思是我想要列表中的整個Person對象。 – daniel 2011-06-07 18:00:47

0

基於什麼TheAlbear公佈,我在事件處理程序想出了這個。

public void rpt_ItemCommand(object source, RepeaterCommandEventArgs e) { 
    Person p = People[e.Item.ItemIndex]; 
} 

我不知道使用索引是否可靠。

+0

索引並非真正可靠的來源,我已更改我的答案以顯示如何傳遞物品ID。 – TheAlbear 2011-06-09 13:14:37

相關問題