下拉列表属性

时间:2014-06-05 16:51:54

标签: c# sql-server-2008

我想知道是否有人可以指出我正确的方向。我的程序有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();
        }
    }
}

代码执行它需要做的事情,当用户从下拉菜单中选择用户名时,他们可以重置用户的密码。但是如果用户输入他们想要重置的用户名,我会在这里收到错误:< / p>

string currentPassword = ddlLogin.SelectedValue.ToString();

错误说对象引用未设置为对象的实例。使用“new”关键字来创建对象实例。我理解错误来自用户输入用户名而不是选择用户名的事实。我的问题是,我不需要代码,我想了解如何继续处理,用户只想输入用户名或从下拉列表中选择它?任何建议重写代码都是受欢迎的,我我是一名初级开发人员。

更新,我无法回答我自己的问题,但现在感谢所有

全部, 谢谢您的帮助。 你们所说的都有用,而且我还需要对我的代码进行一次更改,我意识到我做的事情非常愚蠢:

    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 个答案:

答案 0 :(得分:0)

如果您没有从DropDown中选择一个项目,那么它的SelectedValue将为null。你应该检查它是否为空。如果为null,则从文本框中获取值。

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

我不确定这是否是您想要的用户名。当您输入用户名但从ddlLogin获取密码时,您提到了异常抛出?无论你想分配什么,只需检查下拉列表是否为空如上,并指定正确的变量。