c# - 如何在 gridview 中使用 LinkBut​​ton 删除代码隐藏文件中的选定用户名?

标签 c# asp.net gridview linkbutton

我的“JobPost.mdf”中有一个“UserDetail”表。 我有一个“Gridview1”显示来自“UserDetail”表的列,它有一个主键“UserName”。 这个“UserName”最初是使用 Membership 类函数保存的。 现在我向 GridView1 添加一个“删除”链接按钮。这个“删除”不是自动生成按钮,我从工具箱中拖到列项目模板中。 GridView1 的列现在变为“Delete_LinkBut​​ton”+“UserName”(在 UserDetail 表中)+“City”(在 UserDetail 表中)+“IsAdmin”(在 UserDetail 表中)

我需要的是,通过单击这个“delete_linkBut​​ton”,它只会从“UserDetail”表中删除同一行上的整个用户实体(通过相应的“UserName”链接),以及从中删除所有信息AspNetDB.mdf(用户、成员资格、UserInRole 等)。

我想启动用户确认,但不是强制性的。至少我正在努力使其以正确的方式发挥作用。

for example:

Command     UserName    City           IsAdmin
delete           ken       Los Angles          TRUE
delete           jim        Toronto        FALSE

当我点击第一行的“删除”时,我需要删除“UserDetail”表中关于“ken”的所有记录。同时,AspNetDB.mdf中所有关于“ken”的记录都将消失,包括UserinRole表。

我是 asp.net 的新手,所以我不知道如何将“Delete_LinkBut​​ton”的命令参数传递给代码隐藏文件 LinkBut​​ton1_Click(object sender, EventArgs e),因为我需要一个额外的参数“UserName” ".

我的部分代码如下:

<asp:TemplateField>
                 <ItemTemplate>
                     <asp:LinkButton ID="Delete_LinkButton" runat="server" onclick="LinkButton1_Click1" CommandArgument='<%# Eval("UserName","{0}") %>'>LinkButton</asp:LinkButton>
                 </ItemTemplate>
             </asp:TemplateField>


protected void Delete_LinkButton_Click(object sender, EventArgs e)
     {
      ((LinkButton) GridView1.FindControl("Delete_LinkButton")).Attributes.Add("onclick", "'return confirm('Are you sure you want to delete {0} '" + UserName);
      Membership.DeleteUser(UserName);
      JobPostDataContext db = new JobPostDataContext();
      var query = from u in db.UserDetails
                   where u.UserName == UserName
                   select u;
         for (var Item in query)
         {
              db.UserDetails.DeleteOnSubmit(Item);
         }
      db.SubmitChanges();


     }

请帮忙!

最佳答案

为了确认,您应该将脚本添加到 OnClientClick LinkBut​​ton 的属性:

<asp:LinkButton 
    ID="Delete_LinkButton" 
    runat="server" 
    onclick="LinkButton1_Click1" 
    CommandArgument='<%# Eval("UserName","{0}") %>'
    OnClientClick='if (!confirm("Are you sure you want to delete <%# Eval("UserName","{0}") %>?")) return false;'
>
    LinkButton
</asp:LinkButton>

那个按钮的事件处理程序应该是:

protected void Delete_LinkButton_Click(object sender, EventArgs e)
{
    string userName = ((LinkButton)sender).CommandArgument.ToString();

    Membership.DeleteUser(UserName);
    JobPostDataContext db = new JobPostDataContext();

     foreach (var item in db.UserDetails.Where(u => u.UserName == userName))
          db.UserDetails.DeleteOnSubmit(Item);

    db.SubmitChanges();
}

OnClientClick属性将您写入的 JavaScript 添加到呈现的 <a/> 的 onclick 属性的开头。标签。所以,如果用户不确认删除,它将返回 false 并且什么都不做。否则,它将执行回发以删除。

在事件处理程序中,sender始终是发起事件的控件。在这种情况下,LinkButton .因此,您可以将其转换为 LinkButton并得到它的 CommandArgument属性(property),在哪里打UserName是。

关于c# - 如何在 gridview 中使用 LinkBut​​ton 删除代码隐藏文件中的选定用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430984/

相关文章:

asp.net - 如何强制 asp.net GridView 控件将第一行包装在 <thead> </thead> 标记中

c# - Android 日期到 C# long DateTime-Ticks

asp.net 文本框添加BehaviorID

android - 如何在Grid Layout recyclerview中实现无限滚动

c# - 无法使用 html 文本框登录

c# - 如何在 ASP.NET 中处理或关闭 XML 文档的实例

javascript - 计算百分比网格布局单元格宽度

c# - Parallel.Foreach - NULL 任务

c# - 试图了解我的 IEnumerable 以及为什么我不能使用 .ToList()

c# - 我怎样才能使 WinForms TabPage 标题宽度适合它的标题?