首页 > 解决方案 > 下拉列表选定项目未显示正确的项目

问题描述

// fill from database
SqlConnection cn = new SqlConnection(GlobalData.connectionstring);
string readnamesquery = "select cwFullTitle from tbCowWorkers";

cn.Open();

SqlCommand cmd = new SqlCommand(readnamesquery, cn);

SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);

ddlUsers.DataSource = dt;
ddlUsers.DataValueField = "cwFullTitle";
ddlUsers.DataTextField = "cwFullTitle";
ddlUsers.DataBind();

cn.Close();

// insert selected value to database
SqlConnection cn = new SqlConnection(GlobalData.connectionstring);
string registerQuery = "insert into Depot (dTdeliveryName) values (N'"+ddlUsers.SelectedValue.ToString()+"')";

SqlCommand cmd = new SqlCommand(registerQuery, cn);

cn.Open();
cmd.ExecuteNonQuery();
cn.Close();

我从 SQL Server 填写一个下拉列表,然后将所选项目发送到 SQL Server 中的另一个表;但它将下拉列表的第一项作为选定项发送。

所选项目未更改并返回默认值。

标签: c#asp.netsql-server

解决方案


原因很明显,你是在填充下拉列表,然后插入记录,所以它必然会取DropdownList的第一项。

我建议您将填充下拉列表的代码分开在另一个函数中,并仅在 DropDownList 的 selected_index 更改(ddl_SelectedIndexChanged)上进行插入。在这个 ddl_SelectedIndexChanged 函数中,只需检查下拉列表的选定值并将其插入到您的目标表中(请记住不要调用该函数来加载/填充您当前在共享代码片段中执行的下拉列表)。

像这样的东西

  protected void Page_Load(object sender, EventArgs e)
  {
    if (!IsPostBack)
    {
     SqlConnection cn = new SqlConnection(GlobalData.connectionstring);
     string readnamesquery = "select cwFullTitle from tbCowWorkers";

     cn.Open();

     SqlCommand cmd = new SqlCommand(readnamesquery, cn);

     SqlDataAdapter da = new SqlDataAdapter(cmd);
     DataTable dt = new DataTable();
     da.Fill(dt);

     ddlUsers.DataSource = dt;
     ddlUsers.DataValueField = "cwFullTitle";
     ddlUsers.DataTextField = "cwFullTitle";
     ddlUsers.DataBind();

     cn.Close();
    }
  }

  protected void ddlUser_SelectedIndexChanged(object sender, EventArgs e)
  {
     // insert selected value to database
    SqlConnection cn = new SqlConnection(GlobalData.connectionstring);
    string registerQuery = "insert into Depot (dTdeliveryName) values 
    (N'"+ddlUsers.SelectedValue.ToString()+"')";

    SqlCommand cmd = new SqlCommand(registerQuery, cn);

    cn.Open();
    cmd.ExecuteNonQuery();
    cn.Close();
  }

希望这可以帮助!


推荐阅读