1

我正在尝试在 gridview 中将 asp:Button 与我的 OnRowDeleting 事件连接起来,但我不知道该怎么做:X。我目前正在使用 CommandField 但出于我自己的目的,我需要使用 Button 来代替。任何人都可以帮助我吗?

编辑:

让我重新解释一下,我在同一个 CommandField 中有一行带有 Delete 和 Edit 按钮。我要做的是在某些特定情况下仅针对特定行隐藏“删除”按钮,而不必为每一行隐藏“删除”按钮。这就是我在 CommandField 上苦苦挣扎的原因,因为它没有 ID,所以我无法在代码隐藏中引用它。但是 - asp:Button 有一个 ID,但我无法将它与 UserAccounts_RowDeleting 函数链接起来。这就是我的问题 - 如何链接它?:)

编辑2:

这些是我的代码的一部分:

<asp:GridView ID="UserAccounts" runat="server" AutoGenerateColumns="False" HeaderStyle-BackColor="#3AC0F2" 
HeaderStyle-ForeColor="White" AutoGenerateDeleteButton="false" 
RowStyle-BackColor="#A1DCF2" AlternatingRowStyle-BackColor="White" AutoGenerateEditButton="false" 
onrowcancelingedit="UserAccounts_RowCancelingEdit" RowStyle-ForeColor="#3A3A3A" OnRowEditing="UserAccounts_RowEditing" 
PageSize="10" AllowPaging="false" onrowdeleting="UserAccounts_RowDeleting" 
OnRowUpdating="UserAccounts_RowUpdating" OnRowDataBound="UserAccounts_RowDataBound" onrowcreated="UserAccounts_RowCreated">
<Columns>
 <asp:CommandField ShowDeleteButton="true" ShowEditButton='true' ButtonType="Link" />
 <asp:BoundField  DataField="UserName" HeaderText="Username" ReadOnly="true"/>
 <asp:BoundField DataField="Email" HeaderText="Email" />
 <asp:CheckBoxField DataField="IsApproved" HeaderText="Approved?" ReadOnly="false"/>
 <asp:CheckBoxField DataField="IsLockedOut" HeaderText="Locked Out?" ReadOnly="true"/>
 <asp:CheckBoxField DataField="IsOnline" HeaderText="Online?" ReadOnly="true"/>
 <asp:BoundField DataField="Comment" HeaderText="Comment" NullDisplayText="N/A"/>
 <asp:TemplateField HeaderText="Select" >
    <ItemTemplate> 
        <asp:CheckBox ID="CheckBox1" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 
 </Columns>

//Codebehind c#
protected void UserAccounts_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        if (Funcs.GetAdminLevel() >= 999)
        {
            username = UserAccounts.Rows[e.RowIndex].Cells[1].Text;
            if (username.ToLower().Equals(HttpContext.Current.User.Identity.Name.ToLower()))
                ActionStatus.Text = string.Format("ERROR: You can't delete your own account ('<font color=#000000><b>{0}</b></font>')!", username);
            else if (Funcs.GetAdminLevel(username) >= 1)
                ActionStatus.Text = string.Format("ERROR: You can't delete administrators' accounts ('<font color=#000000><b>{0}</b></font>')!", username);
            else
            {
                Roles.RemoveUserFromRoles(username, Roles.GetRolesForUser(username));
                Membership.DeleteUser(username);
                ActionStatus.Text = string.Format("User '<font color=#000000><b>{0}</b></font>' has been successfully deleted!", username);
                BindUserAccounts();
            }
        }
        else
            ActionStatus.Text = "You are not authorized to delete user accounts!";
    }

我想将 CommandField 更改为 ItemTemplate,以便我可以通过代码隐藏仅针对特定行启用/禁用它。另外,我希望 ItemTemplate(即 asp:Button)使用 UserAccounts_RowDeleting 事件,这就是我的问题所在,我只是不知道如何将按钮链接到事件。

4

1 回答 1

1

听起来您几乎已经有了解决方案。使用 aTemplateField作为您的按钮。关键部分是将CommandName按钮设置为“删除”。这告诉 GridView 它是一个删除按钮,RowDeleting事件应该处理它。

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btnDelete" runat="server" Text="Delete" CommandName="Delete" />
    </ItemTemplate>
</asp:TemplateField>
于 2014-10-21T13:22:12.663 回答