C# ASP.NET:使用Gridview删除用户配置文件
我有一个这样的SQLC# ASP.NET:使用Gridview删除用户配置文件,c#,asp.net,authentication,gridview,asp.net-membership,C#,Asp.net,Authentication,Gridview,Asp.net Membership,我有一个这样的SQL select B.LoweredUserName from USER_BAYI A, aspnet_Users B, aspnet_Membership C where B.UserId = C.UserId AND B.UserName = A.USERNAME 它正在获取我的会员数据库中的所有用户名 我想使用Gridview的删除属性从我的成员数据库中删除此用户 sqldatasource中的删除命令为 DeleteCommand="DELETE FRO
select B.LoweredUserName
from USER_BAYI A, aspnet_Users B, aspnet_Membership C
where B.UserId = C.UserId
AND B.UserName = A.USERNAME
它正在获取我的会员数据库中的所有用户名
我想使用Gridview的删除属性从我的成员数据库中删除此用户
sqldatasource中的删除命令为
DeleteCommand="DELETE FROM aspnet_Users
WHERE LoweredUserName = @LoweredUserName" ondeleted="SqlDataSource1_Deleted"
protected void SqlDataSource1_Deleted(object sender, SqlDataSourceStatusEventArgs e)
{
DbCommand cmd = e.Command;
string username = cmd.Parameters["@LoweredUserName"].Value.ToString();
Membership.DeleteUser(username);
}
但这甚至没有编译。我哪里做错了?或者您能告诉我一种方法吗?在GridView上设置DataKeyNames,如下所示:
DataKeyNames=“ProviderUserKey”
并将OnDeleteCommand设置为某种方法,如:OnDeleteCommand=“gvUser\U DeleteCommand”
然后在代码隐藏中实现如下onDelete方法:
protected void rgUser_DeleteCommand(object source, GridCommandEventArgs e)
{
GridDataItem gdiItem = (GridDataItem)e.Item;
try
{
string strUserKey = gdiItem.GetDataKeyValue("ProviderUserKey").ToString();
Guid guiUserKey = new Guid(strUserKey);
string strUserName = Membership.GetUser(guiUserKey).UserName.ToString();
Membership.DeleteUser(strUserName);
}
catch (Exception ex)
{
//handle exception
}
}
为了获得更多信息,您绑定到了SqlDataSource上的错误事件。
ondeletted
事件是在删除记录后激发的,您需要OnDeleting
事件,因为它是在删除记录之前激发的。在OnDeleting
事件中,您可以添加自定义删除代码,然后取消该事件,但不能在ondeletted
事件中执行此操作。是否在GridView上设置了DataKeyName?嗯,这看起来是个不错的解决方案。我这样解决它protectedvoid SqlDataSource1_Deleting(objectsender,SqlDataSourceCommandEventArgs e){DbCommand cmd=e.Command;string username=cmd.Parameters[@LoweredUserName].Value.ToString();Membership.DeleteUser(username,true);}
@SonerGönül是的,类似。您将在SqlDataSource的事件中删除该用户,而我的解决方案将在GridView的事件中删除该用户。请注意,Membership.DeleteUser()
搜索的是用户的UserName
属性,而不是LoweredUserName
属性。是的,谢谢您为我澄清!我接受这个答案。谢谢你的关注。