2014-06-05 97 views
2

我想知道如果有人能指出我在正確的方向。我的程序有1個下拉列表,2個文本框和2個按鈕。下拉列表屬性

namespace passwordReset 
{ 
    public partial class Form1 : Form 
    { 
     //variables to mess with the password 
     public string password1; 
     public string password2; 
     public string username; 

     public Form1() 

     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      SqlConnection connection = new SqlConnection(xxxxxxx); 
      connection.Open(); 
      string query = "select Login, Password from Employees order by Login desc"; 
      SqlDataAdapter da = new SqlDataAdapter(query, connection); 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "Credentials"); 
      ddlLogin.DisplayMember = "Login"; 
      ddlLogin.ValueMember = "Password"; 
      ddlLogin.DataSource = ds.Tables["Credentials"]; 
      connection.Close(); 

     } 

     private void ddlLogin_SelectedIndexChanged(object sender, EventArgs e) 
     { 


      if (ddlLogin.SelectedItem != null) 
      { 
       DataRowView drv = ddlLogin.SelectedItem as DataRowView; 
       //MessageBox.Show("The username you selected is: " + drv.Row["Login"].ToString()); 
       //MessageBox.Show("The password you selected is: " + drv.Row["Password"].ToString()); 
       //MessageBox.Show("username selected is: " + ddlLogin.Text.ToString()); 
       //MessageBox.Show("password is: " + ddlLogin.SelectedValue.ToString()); 
      } 

     } 

     private void txtPassword1_TextChanged(object sender, EventArgs e) 
     { 
      password1 = txtPassword1.Text; 

     } 

     private void txtPassword2_TextChanged(object sender, EventArgs e) 
     { 
      password2 = txtPassword2.Text; 
     } 

     private void btnReset_Click(object sender, EventArgs e) 
     { 
      if (ddlLogin.Text == "rruales" || ddlLogin.Text == "xxxxx" || ddlLogin.Text == "xxxxxx") 
      { 
       MessageBox.Show("Cannot change this user's password"); 

      } 
      if (password1 == password2 && ddlLogin.Text != "rruales" && ddlLogin.Text != "xxxxx" && ddlLogin.Text != "xxxxx") 
      { 
       string newPassword = txtPassword2.Text; 
       username = ddlLogin.Text.ToString(); 
       string currentPassword = ddlLogin.SelectedValue.ToString(); 
       currentPassword = newPassword; 
       SqlConnection connection = new SqlConnection(xxxxxxxx); 
       SqlCommand cmd = new SqlCommand(); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "UPDATE Employees SET [Password] = @password WHERE [Login] = @login"; 
       cmd.Parameters.AddWithValue("@password", currentPassword); 
       cmd.Parameters.AddWithValue("@login", username); 
       cmd.Connection = connection; 

       connection.Open(); 
       cmd.ExecuteNonQuery(); 
       MessageBox.Show("Password successfully updated"); 
       connection.Close(); 


      } 

      else 
      { 
       MessageBox.Show("You either choose usernames rruales or xxxxx or xxxx, or the passwords don't match, try again"); 
      } 
     } 

     private void btnClose_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
     } 
    } 
} 

的代碼做的事情需要做,當用戶選擇從下拉菜單中用戶名,就可以重新設置用戶的password.But如果用戶鍵入他們要重置的用戶名,我得到一個錯誤的位置:

string currentPassword = ddlLogin.SelectedValue.ToString(); 

錯誤說對象引用未設置爲一個object.use「新」關鍵字實例創建對象instance.I理解錯誤是一個事實,即用戶輸入來用戶名而不是選擇它。我的問題是,我不需要代碼,我想了解如何繼續並處理,用戶只需鍵入用戶名或從下拉列表中選擇它?任何建議重寫代碼是值得歡迎的,我我是一名入門級開發人員。

更新,我不能回答我的問題,但現在它工作的感謝所有

所有, 感謝你的幫助。 大家所說的什麼工作,我也不得不做1只改變我的代碼,我意識到我是在做一件很愚蠢的:

private void txtPassword1_TextChanged(object sender, EventArgs e) 
    { 
     password1 = txtPassword1.Text; 

    } 

    private void txtPassword2_TextChanged(object sender, EventArgs e) 
    { 
     password2 = txtPassword2.Text; 
    } 

    private void btnReset_Click(object sender, EventArgs e) 
    { 
     if (ddlLogin.SelectedValue == null) 
     { 
      username = ddlLogin.Text.ToString(); 
     } 
     else 
     { 
      username = ddlLogin.Text.ToString(); 
     } 

     if (ddlLogin.Text == "rruales" || ddlLogin.Text == "xxxxx" || ddlLogin.Text == "xxxxxx") 
     { 
      MessageBox.Show("Cannot change this user's password"); 

     } 
     if (password1 == password2 && ddlLogin.Text != "rruales" && ddlLogin.Text != "xxxxxx" && ddlLogin.Text != "xxxxxx") 
     { 
      string newPassword = txtPassword2.Text; 



      //username = ddlLogin.Text.ToString(); 
      // string currentPassword = ddlLogin.SelectedValue.ToString(); 


      currentPassword = newPassword; 
      SqlConnection connection = new SqlConnection(xxxxxx); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "UPDATE Employees SET [Password] = @password WHERE [Login] = @login"; 
      cmd.Parameters.AddWithValue("@password", currentPassword); 
      cmd.Parameters.AddWithValue("@login", username); 
      cmd.Connection = connection; 

      connection.Open(); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Password successfully updated"); 
      connection.Close(); 


     } 

     else 
     { 
      MessageBox.Show("You either choose usernames rruales or xxxxx or xxxx, or the passwords don't match, try again"); 
     } 
    } 

    private void btnClose_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 
} 

}

我不知道爲什麼我這樣做:

string currentPassword = ddlLogin.SelectedValue.ToString(); 
+1

那麼如果用戶輸入沒有選定的值。所以你應該檢查它爲空,如果是這樣的話使用ddl的文本屬性。 – TaW

+0

如果用戶輸入名稱而不是從列表中選擇,那麼selecteditem屬性將不會被設置,它將爲空。如果是這種情況,那麼嘗試根據ddlLogin.text屬性在列表中找到該項目(它看起來像我在解釋@ TaW) –

回答

0

如果您沒有從DropDown中選擇一個項目,它的SelectedValue將爲null。你應該檢查它是否爲空。如果它爲空,則從文本框中獲取值。

string userName; 
if (ddlLogin.SelectedValue == null) { 
    userName = theTextBox.Text; 
} else { 
    username = theDropDownList.SelectedValue.Text; 
} 

我不確定它是否是您試圖獲取的用戶名。您提到輸入用戶名時會拋出異常,但是您從ddlLogin獲取密碼?無論你想分配什麼,只要檢查下拉列表是否像上面那樣是空的並分配給正確的變量。

+0

很酷,我會試試看,謝謝你尼爾 –