2010-10-15 55 views
0

我對這段代碼感到困惑。Asp.net MembershipUser從GridView中檢索數據

我需要設置IsApproved = true;對於用戶(使用MembershipUser)當我在GridView中選擇一個CheckBox時。

事件處理程序uxRoleCheckBoxSelector_CheckChanged它設置在實際的CheckBox上。

你能告訴我傢伙我做錯了什麼嗎?

腳本不會生成任何異常,但不起作用。感謝您的支持!

protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e) 
     { 
      // Cast sender to CheckBox 
      CheckBox activeCheckBox = (CheckBox)sender; 
      // Retrieve the row where CheckBox is contained (NamingContainer used to retrive parent control 
      GridViewRow row = (GridViewRow)activeCheckBox.NamingContainer; 
      // Retrive the Lable for an User name in a row 
      Label myUserName = (Label)row.FindControl("uxUserNameLabelDisplayer"); 

      GridViewRow user = (GridViewRow)myUserName.NamingContainer; 
      MembershipUser myUser = (MembershipUser)user.DataItem; 


      if (activeCheckBox.Checked == true) 
      { 
       uxMessageDisplayer.Text = "T - Aproved User"; 
       myUser.IsApproved = true; 
       Membership.UpdateUser(myUser); 
      } 
      else 
      { 
       uxMessageDisplayer.Text = "F - NOT Aproved User"; 
       myUser.IsApproved = false; 
       Membership.UpdateUser(myUser); 
      } 
     } 

來調整和您的建議後這裏的腳本編輯。現在是工作...希望能幫助別人:-)

protected void uxRoleCheckBoxSelector_CheckChanged(object sender, EventArgs e) 
    { 
     // Cast sender to CheckBox 
     CheckBox activeCheckBox = (CheckBox)sender; 
     // Retrieve the row where CheckBox is contained (NamingContainer used to retrive parent control 
     GridViewRow row = (GridViewRow)activeCheckBox.NamingContainer; 
     // Retrive the name for the User from a label 
     Label myUserName = (Label)row.FindControl("uxUserNameLabelDisplayer"); 

     // Keep User's name in a variable 
     string UserName = myUserName.Text; 
     // Create an Object of type MembershipUser and associate its User's name 
     MembershipUser myUser = Membership.GetUser(UserName); 

     // Check if a CheckBox is selected or not for a User 
     if (activeCheckBox.Checked == true) 
     { 
      // Set status for an User 
      myUser.IsApproved = true; 
      // Save status 
      Membership.UpdateUser(myUser); 
      // Display message 
      uxMessageDisplayer.Text = string.Format("The User {0} has been activated.", UserName); 
     } 
     else 
     { 
      myUser.IsApproved = false; 
      Membership.UpdateUser(myUser); 
      uxMessageDisplayer.Text = string.Format("The User {0} has been deactivated. User cannot use this System.", UserName); 
     } 
    } 

回答

0

你確定這個事件實際上是被炒魷魚(因此這種方法實際運行)?

您是否在複選框上設置了AutoPostBack = true?如果沒有,並且您正在使用按鈕進行回發,我不確定該事件是否會被複選框觸發......但如果我錯了,請糾正我。

+0

嗨,是的事件正在被解僱。所有的邏輯工作。 AutoPostBack對於CheckBox爲TRUE。我試圖調試我的代碼,我和MembershipUser myUser總是在NULL ....任何想法?感謝您的時間 – GibboK 2010-10-16 07:41:59

+0

你能告訴它在什麼時候不工作......就像你可以在那裏放置一些斷點並調試並看看事情出錯的地方? uxMessageDisplayer.Text是否被更改? (如果沒有拋出異常,應該如果不是的話),再次檢查這個方法是否真的在運行。如果是的話,儘量縮小這部分不起作用 – 2010-10-17 08:09:01

+0

嗨,克里斯,我再次測試腳本,沒有任何異常被拋出,uxMessageDisplayer.Text得到正確更改,事件和方法已被正確使用。 使用一些斷點我可以確認你的問題是 「MembershipUser myUser =(MembershipUser)user.DataItem;」 myUser的值始終爲NULL,所以我無法應用Membership.UpdateUser(myUser); 任何想法?感謝您的支持:-) – GibboK 2010-10-18 06:14:10