5

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

}
4

3 回答 3

11

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

您可以将 thesender转换为 Button。ButtonNamingContainerListViewItem. 您可以使用它来获得该项目中的所有其他控件,方法是使用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");
}

您找不到不在服务器控件中的文本。但是您可以使用LiteralControlorLabel来显示用户名或电子邮件。

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

现在您可以使用FindControl如上所示在代码隐藏中获取对标签的引用。

于 2012-07-12T21:22:04.863 回答
1

我知道2个解决方案:


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


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

于 2012-10-10T23:56:10.310 回答
0

您应该使用 GridView,因为数据是表格的。无论如何,您都可以实现 ItemCommand 事件。MSDN 页面有一个示例

您可以自定义控件CommandNameCommandArgument属性Button。可以使 CommandArgument 包含一些 ID 或相关信息。

于 2012-07-12T21:28:15.773 回答