2009-11-02 74 views
3

文件後面的代碼創建員工列表,並且asp.net頁面循環顯示列表。 現在,我如何將employeedID分配給asp:button的commandArgument?從foreach循環向asp:按鈕分配一個值CommandArgument

<%foreach(var employee in employeesList){%> 
    <tr> 
    <td><%=employee.firstName%></td> 
    <td><%=employee.lastName%></td> 
    /*How to access employee.Id in the commandArgument? */ 
    <td><asp:Button ID="btnDeleteEmployee" runat="server" CommandArgument='' Text="Delete" OnCommand="btnDeleteEmployee_Click" /></td> 
    </tr> 
<%}%> 
+0

這是MVC代碼還是WebForms? – pmarflee 2009-11-02 01:07:07

+0

這是webforms.Please看到我的評論爲Aaron的答案。 – krishna 2009-11-02 01:12:48

回答

5

根據您的意見,這裏是一個嵌套的例子:

標記:

<asp:Repeater runat="server" ID="rptOutter" 
    onitemdatabound="rptOutter_ItemDataBound" > 
    <ItemTemplate> 
     <tr> 
      <td><%#Eval("firstName") %></td> 
      <td><%#Eval("lastName") %></td> 
      <td><asp:Button runat="server" ID="btnDeleteEmployee" CommandArgument='<%#Eval("Id") %>' Text="Delete" OnCommand="btnDeleteEmployee_Click" /></td> 
      <td> 
       <asp:Repeater runat="server" ID="rptInner" > 
        <ItemTemplate> 
         <table>         
          <tr> 
           <td><%#Eval("firstNameInner") %></td> 
           <td><%#Eval("lastNameInner") %></td> 
          </tr> 
         </table> 
        </ItemTemplate> 
       </asp:Repeater> 

      </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

CodeBehind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     rptOutter.DataSource = outterDataSource; 
     rptOutter.DataBind(); 
    } 

} 

protected void rptOutter_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    RepeaterItem item = e.Item; 
    if ((item.ItemType == ListItemType.Item) || 
     (item.ItemType == ListItemType.AlternatingItem)) 
    { 
     //get your datasource from parent repeater if needed 
     //cast to your datasource type 
     //DataSourceObject ds = (DataSourceObject)item.DataItem; 
     Repeater r = e.Item.FindControl("rptInner") as Repeater; 
     if (r != null) 
     { 
      r.DataSource = innerDataSource; 
      r.DataBind(); 
     } 
    } 

} 
+0

很高興我在發佈幾乎完全相同的東西之前看到了這個! – Aaron 2009-11-02 01:36:25

+0

謝謝瑞克。這工作在代碼複製/粘貼問題。應該是: if(r!= null)r.DataSource = innerDataSource; r.DataBind(); } – krishna 2009-11-02 04:09:23

+0

哎呀,它的更新。 – 2009-11-02 12:39:10

2
<asp:Repeater runat="server" ID="rptEmployeeList"> 
    <ItemTemplate> 
     <tr> 
      <td><%#Eval("firstName") %></td> 
      <td><%#Eval("lastName") %></td> 
      <td><asp:Button runat="server" ID="btnDeleteEmployee" CommandArgument='<%#Eval("Id") %>' Text="Delete" OnCommand="btnDeleteEmployee_Click" /></td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 

,然後在代碼隱藏

if (!Page.IsPostBack) 
{ 
    rptEmployeeList.DataSource = employeeList; 
    rptEmployeeList.DataBind(); 
} 
+0

是否有可能使用foreach循環,因爲在這種情況下,我需要嵌套for循環來檢查員工正在處理的項目(示例)。或者,我可以有一個嵌套的asp:Repeater嗎? – krishna 2009-11-02 01:09:56

+0

_rick_schott有一個嵌套示例 – Aaron 2009-11-02 01:37:21