C# 动态绑定的Dropdownlist在通过ddl获取时始终取第一个值。SelectedValue
我有一个动态绑定的dropdownlist,希望从中在表中插入所选值。但是当我提交表单时,它采用的是dropdownlist的第一个值,而不是所选值,并插入dropdownlist的第一个值 这是我的密码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())) {
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按钮时重新填充。
(您应该考虑将列表中的人口代码分为单独的方法)