我有ListView
创建一个表。表中的每一行都有两个按钮 - 删除和修改。我正在为每个按钮触发一个click事件,但我不知道如何获取按钮被单击的行中的数据句柄。
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>
<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) {
}
答案 0 :(得分:11)
我会尝试回答标题中的问题,因为我不了解问题本身。
您可以将sender
强制转换为按钮。 Button的NamingContainer
是ListViewItem
。您可以使用此功能通过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");
}
您找不到服务器控件中没有的文本。但您可以使用LiteralControl
或Label
来显示用户名或电子邮件。
<td><asp:Label id="Label1" runat="server"
Text='<%# Eval("user.UserName") %>' />
</td>
现在您可以使用上面显示的FindControl
来获取对代码隐藏中标签的引用。
答案 1 :(得分:1)
我知道2个解决方案:
1命令名称和命令参数如下
2- 您可以使用链接而不是按钮并发送包含的queryString 你的记录的id是你的同一页面,并采取查询字符串 代码隐藏(页面加载)并使用它来删除sqlcommadns或将其重定向到另一个页面 编辑目的,最后再将Response.Redirect()再次发送到您所在的页面。
答案 2 :(得分:0)
您应该使用GridView,因为数据是表格式的。无论如何,您可以实现ItemCommand事件。 MSDN page has an example。{{3}}。
您可以自定义CommandName
控件的CommandArgument
和Button
属性。 CommandArgument可以包含一些ID或相关的信息。