2012-07-12 54 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()再次到您所在的同一页面。

相关问题