2011-11-18 62 views
0

我有這樣的SQL;ASP.NET:使用Gridview刪除用戶配置文件

select B.LoweredUserName 
    from USER_BAYI A, aspnet_Users B, aspnet_Membership C 
    where B.UserId = C.UserId 
    AND B.UserName = A.USERNAME 

它在我的會員數據庫中獲取所有用戶名。

enter image description here

我想用戶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); 
    } 

但是,這甚至沒有編譯。我在哪裏做錯了?或者你能告訴我一個辦法嗎?

+1

您是否在GridView上設置了DataKeyNames? http://weblogs.asp.net/jnadal/archive/2006/02/28/439303.aspx –

回答

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事件中執行此操作。

+1

嗯。這看起來不錯。我是這樣解決的; 'protected void SqlDataSource1_Deleting(object sender,SqlDataSourceCommandEventArgs e) {DbCommand cmd = e.Command; string username = cmd.Parameters [「@ LoweredUserName」]。Value.ToString(); Membership.DeleteUser(username,true); }' –

+1

@SonerGönül是的,它是相似的。您在SqlDataSource的事件中刪除用戶,並且我的解決方案將刪除GridView事件中的用戶。請注意,Membership.DeleteUser()會搜索UserName屬性,而不是用戶的LoweredUserName屬性。 – Mentoliptus

+0

是的,謝謝澄清我!我接受這個答案。感謝您的關注。 –