【问题标题】:How to use a LinkButton inside gridview to delete selected username in the code-behind file?如何在 gridview 中使用 LinkBut​​ton 删除代码隐藏文件中选定的用户名?
【发布时间】:2011-03-25 10:04:46
【问题描述】:

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

我需要的是,通过单击此“delete_linkBut​​ton”,它只会从“UserDetail”表中删除同一行上的整个用户实体(由相应的“UserName”链接),以及从“UserDetail”表中删除所有信息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();


     }

请帮忙!

【问题讨论】:

标签: c# asp.net gridview linkbutton


【解决方案1】:

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

<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 添加到呈现的 &lt;a/&gt; 标记的 onclick 属性的开头。因此,如果用户不确认删除,它将返回 false 并且什么也不做。否则,它将执行回发删除。

在事件处理程序中,sender 始终是发起事件的控件。在这种情况下,LinkButton。因此,您可以将其转换为 LinkButton 并获取其 CommandArgument 属性,其中 tye UserName 是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多