Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 动态绑定的Dropdownlist在通过ddl获取时始终取第一个值。SelectedValue_C#_Asp.net - Fatal编程技术网

C# 动态绑定的Dropdownlist在通过ddl获取时始终取第一个值。SelectedValue

C# 动态绑定的Dropdownlist在通过ddl获取时始终取第一个值。SelectedValue,c#,asp.net,C#,Asp.net,我有一个动态绑定的dropdownlist,希望从中在表中插入所选值。但是当我提交表单时,它采用的是dropdownlist的第一个值,而不是所选值,并插入dropdownlist的第一个值 这是我的密码 protected void Page_Load(object sender, EventArgs e) { using (SqlConnection conn = new SqlConnection(connection.getConnection())) {

我有一个动态绑定的dropdownlist,希望从中在表中插入所选值。但是当我提交表单时,它采用的是dropdownlist的第一个值,而不是所选值,并插入dropdownlist的第一个值

这是我的密码

protected void Page_Load(object sender, EventArgs e)
{
    using (SqlConnection conn = new SqlConnection(connection.getConnection()))
    {
        string sqlGetClass = "select pk_classID,brachName+'-'+classYear as classInfo from tbl_studentClass";
        SqlCommand cmdGetClass = new SqlCommand(sqlGetClass, conn);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmdGetClass);
        DataSet ds = new DataSet();
        da.Fill(ds);
        ddlClass.DataSource = ds;
        ddlClass.DataTextField = "classInfo";
        ddlClass.DataValueField = "pk_classID";
        ddlClass.DataBind();
        ddlClass.Items.Insert(0, new ListItem("--SELECT--", ""));
        conn.Close();
    }
}

protected void btnStdRegisterSubmit_Click(object sender, EventArgs e)
{
    string dateOfBirth = txtStdDOBYear.Text+"-"+ddlStdDOBMonth.SelectedValue + "-"+txtStdDOBDate.Text;
    using (SqlConnection conn = new SqlConnection(connection.getConnection()))
    {
        string sqlInsertStd = "Insert into tbl_studentRegistration (firstName,surname,studentUsername,studentPassword,studentDOB,studentGender,studentMobile,class) values(@firstName,@surname,@studentUsername,@studentPassword,@studentDOB,@studentGender,@studentMobile,@class)";
        conn.Open();
        SqlCommand cmdInsertStd = new SqlCommand(sqlInsertStd, conn);
        cmdInsertStd.Parameters.AddWithValue("@firstName", txtStdFirstName.Text);
        cmdInsertStd.Parameters.AddWithValue("@surname", txtStdSurname.Text);
        cmdInsertStd.Parameters.AddWithValue("@studentUsername", txtStdUsername.Text);
        cmdInsertStd.Parameters.AddWithValue("@studentPassword", txtStdPassword.Text);
        cmdInsertStd.Parameters.AddWithValue("@studentDOB", DateTime.Parse(dateOfBirth).ToString("yyyy-MM-dd"));
        cmdInsertStd.Parameters.AddWithValue("@studentGender", ddlStdGender.SelectedValue.ToString());
        cmdInsertStd.Parameters.AddWithValue("@studentMobile", txtStdMobile.Text);
        cmdInsertStd.Parameters.AddWithValue("@class", ddlClass.SelectedValue);

        cmdInsertStd.ExecuteNonQuery();
        conn.Close();

        txtStdFirstName.Text = "";
        txtStdSurname.Text = "";
        txtStdUsername.Text = "";
        ddlClass.SelectedValue = "";
        txtStdPassword.Text = "";
        txtStdConfirmPassword.Text = "";
        ddlStdDOBMonth.SelectedValue = "";
        txtStdDOBDate.Text = "";
        txtStdDOBYear.Text = "";
        ddlStdGender.SelectedValue = "";
        txtStdMobile.Text = "";
        Response.Redirect("~/index.aspx");
    }
}

请帮助我,我是asp.net新手问题:当代码添加到
页面加载
事件处理程序时,您正在为每个页面请求将项目添加到
DropDownList
。因此,
DropDownList
始终将第一个项目作为selectedItem包含,即使您选择了不同的项目

解决方案:只有在加载页面时,而不是在每次回发请求时,才需要将项目附加到
下拉列表中

您可以使用
Page.IsPostBack
来确定页面请求是否为回发请求

试试这个:

if(!Page.IsPostBack)
{
    using (SqlConnection conn = new SqlConnection(connection.getConnection()))
    {
        string sqlGetClass = "select pk_classID,brachName+'-'+classYear as 
                                         classInfo from tbl_studentClass";
        SqlCommand cmdGetClass = new SqlCommand(sqlGetClass, conn);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmdGetClass);
        DataSet ds = new DataSet();
        da.Fill(ds);
        ddlClass.DataSource = ds;
        ddlClass.DataTextField = "classInfo";
        ddlClass.DataValueField = "pk_classID";
        ddlClass.DataBind();
        ddlClass.Items.Insert(0, new ListItem("--SELECT--", ""));
        conn.Close();
    }
}

每次页面发回时(例如单击提交按钮时)都会执行页面加载。你应该把你的using stateme3nt放在

有条件的:

    protected void Page_Load(object sender, EventArgs e)
    {
       if(!Page.IsPostBack)
       {
        using (SqlConnection conn = new SqlConnection(connection.getConnection()))
        {
            string sqlGetClass = "select pk_classID,brachName+'-'+classYear as classInfo from tbl_studentClass";
            SqlCommand cmdGetClass = new SqlCommand(sqlGetClass, conn);
            conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(cmdGetClass);
            DataSet ds = new DataSet();
            da.Fill(ds);
            ddlClass.DataSource = ds;
            ddlClass.DataTextField = "classInfo";
            ddlClass.DataValueField = "pk_classID";
            ddlClass.DataBind();
            ddlClass.Items.Insert(0, new ListItem("--SELECT--", ""));
            conn.Close();
        }
      }
    }
这样,您的列表不会在每次单击Submit按钮时重新填充。 (您应该考虑将列表中的人口代码分为单独的方法)