2012-07-12 56 views
4

我有一個ListView創建一個表。表中的每一行都有兩個按鈕 - 刪除和修改。我爲每個按鈕觸發一個單擊事件,但我不確定如何獲取按鈕被單擊的行中的數據的句柄。單擊按鈕行時獲取ListView項目

ASPX

<asp:ListView runat="server" ID="usersListView"> 
    <LayoutTemplate> 
     <table class="table table-striped"> 
      <thead> 
       <tr> 
        <th>User Name</th> 
        <th>Email</th> 
        <th>Role</th> 
        <th>Actions</th> 
       </tr> 
      </thead> 
      <tbody> 
       <asp:PlaceHolder runat="server" ID="groupPlaceHolder"/> 
      </tbody> 
     </table> 
    </LayoutTemplate> 
    <GroupTemplate> 
     <tr> 
      <asp:PlaceHolder runat="server" ID="itemPlaceHolder"/> 
     </tr> 
    </GroupTemplate> 
    <ItemTemplate> 
     <td><%# Eval("user.UserName") %></td> 
     <td><%# Eval("user.Email") %></td> 
     <td><%# Eval("roles") %></td> 
     <td> 
      <button runat="server" id="modify" class="btn btn-mini" title="Modify" onclick="modify_OnClick"> 
       <i class="icon-edit"></i> 
      </button>&nbsp; 
      <button runat="server" id="delete" class="btn btn-mini" title="Delete" onclick="delete_OnClick"> 
       <i class="icon-trash"></i> 
      </button> 
     </td> 
    </ItemTemplate> 
</asp:ListView> 

aspx.cs

public void delete_Onclick(object sender, EventArgs e) { 

} 

public void modify_Onclick(object sender, EventArgs e) { 

} 

回答

10

我會盡量回答標題中的問題,因爲我不明白這個問題本身。

您可以將sender投射到按鈕。按鈕的NamingContainerListViewItem。您可以使用item.FindControl("OtherControlID")來獲得該項目中的所有其他控件。

例如;

public void delete_Onclick(object sender, EventArgs e) { 
    var btn = (Button)sender; 
    var item = (ListViewItem)btn.NamingContainer; 
    // find other controls: 
    var btnModify = (Button)item.FindControl("modify"); 
} 

您找不到不在服務器控件中的文本。但是,您可以使用LiteralControlLabel來顯示用戶名或電子郵件。現在

<td><asp:Label id="Label1" runat="server" 
      Text='<%# Eval("user.UserName") %>' /> 
</td> 

可以使用FindControl如上圖所示去在代碼隱藏標籤的參考。

+0

一旦我有'項目'不應該我能夠得到'用戶名'列所選行? – bflemi3 2012-07-12 21:31:41

+0

您無法找到不在服務器控件中的文本。但是您可以使用LiteralControl或Label。編輯我的答案。 – 2012-07-12 21:45:44

+0

我不能只是添加一個runat =「服務器」到'td'並以這種方式訪問​​它? – bflemi3 2012-07-12 23:01:42

0

您應該使用GridView,因爲數據是表格。無論如何,你可以實現ItemCommand事件。該MSDN page has an example。您可以定製CommandNameButton控件的屬性。 CommandArgument可以包含一些ID或相關信息。

1

我知道2級的解決方案:


1 - 命令名稱和命令參數如下


2- 您可以使用鏈接,而不是按鈕和發送的queryString包括 的你的記錄的ID是你在同一頁面,並在 代碼後面(頁面加載)查詢字符串,並將其用於刪除sqlcommadns或將其重定向到另一頁面 編輯目的和最後Response.Redirect()再次到您所在的同一頁面。

相關問題