单击行中的按钮时获取ListView项

时间:2012-07-12 21:04:55

标签: c# listview

我有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>&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) {

}

3 个答案:

答案 0 :(得分:11)

我会尝试回答标题中的问题,因为我不了解问题本身。

您可以将sender强制转换为按钮。 Button的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来获取对代码隐藏中标签的引用。

答案 1 :(得分:1)

我知道2个解决方案:


1命令名称和命令参数如下


2- 您可以使用链接而不是按钮并发送包含的queryString 你的记录的id是你的同一页面,并采取查询字符串 代码隐藏(页面加载)并使用它来删除sqlcommadns或将其重定向到另一个页面 编辑目的,最后再将Response.Redirect()再次发送到您所在的页面。

答案 2 :(得分:0)

您应该使用GridView,因为数据是表格式的。无论如何,您可以实现ItemCommand事件。 MSDN page has an example。{{3}}。

您可以自定义CommandName控件的CommandArgumentButton属性。 CommandArgument可以包含一些ID或相关的信息。

相关问题