我有这样的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 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);
}
但这甚至无法编译。我哪里做错了?或者你能告诉我这样做的方法吗?
答案 0 :(得分:1)
在GridView上设置DataKeyNames,如下所示:DataKeyNames="ProviderUserKey"
并将OnDeleteCommand设置为某种方法:OnDeleteCommand="gvUser_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上的错误事件。删除记录后会触发OnDeleted
事件,并且您需要OnDeleting
事件,因为在删除记录之前会触发该事件。在OnDeleting
活动中,您可以添加自定义删除代码,然后取消活动,但不能在OnDeleted
活动中执行此操作。