簡體   English   中英

DropDownList 中的值不會保存到 SQL Server 表中

[英]Value from DropDownList will not save into SQL Server table

我有一個 DropDownList,它由名為tblVisa的 SQL Server 表tblVisa 我的問題是未保存從 SQL Server 表填充的值。 除了我的 DropDownLists 之外,其他所有內容都會被保存。 我試過使用.SelectedValue.Text ,但它仍然不起作用。

這是我的代碼

protected void PopulateVisaType()
{
        List<ListItem> result = new List<ListItem> { new ListItem("", "") };

        SqlCommand cmd = new SqlCommand() { Connection = sqlConn, CommandText = "SELECT VisaType FROM tblVisa ORDER BY VisaType ASC" };

        if (sqlConn.State == ConnectionState.Closed) 
        {
            sqlConn.Open(); 
        }

        SqlDataReader read = cmd.ExecuteReader();

        while (read.Read())
        {
            result.Add(new ListItem(read["VisaType"].ToString(), read["VisaType"].ToString()));
        }

        read.Close();
        sqlConn.Close();
        cmd.Dispose();

        DDLVisa.DataSource = result;
        DDLVisa.DataValueField = "value";
        DDLVisa.DataTextField = "text";
        DDLVisa.DataBind();
}

這是我將信息保存到數據庫中的代碼:

protected void LbSaveProfile_Click(object sender, EventArgs e)
{
    SqlCommand cmd = new SqlCommand() { Connection = sqlConn, CommandText = "spSaveNewProviderInformation", CommandType = CommandType.StoredProcedure };

    if (sqlConn.State == ConnectionState.Closed)
    { 
        sqlConn.Open(); 
    }

    cmd.Parameters.AddWithValue("@EmployeeNumber", TbEmployeeNumber.Text.Trim());
    cmd.Parameters.AddWithValue("@SSN", TbSSN.Text.Trim());
    cmd.Parameters.AddWithValue("@ContractType", DDLContractType.SelectedItem.Value);
    cmd.Parameters.AddWithValue("@Firstname", TbFirstname.Text.Trim());
    cmd.Parameters.AddWithValue("@Lastname", TbLastname.Text.Trim());
    cmd.Parameters.AddWithValue("@MiddleInitial", TbMiddleInitial.Text.Trim());
    cmd.Parameters.AddWithValue("@ContractRenewalDate", TbContractRenewalDate.Text.Trim());
    cmd.Parameters.AddWithValue("@Position", DDLPosition.Text.Trim());
    cmd.Parameters.AddWithValue("@Specialty", DDLSpecialty.Text.Trim());
    cmd.Parameters.AddWithValue("@PrimaryDepartment", DDLPrimaryDepartment.Text.Trim());
    cmd.Parameters.AddWithValue("@SecondaryDepartment", DDLSecondaryDepartment.Text.Trim());
    cmd.Parameters.AddWithValue("@Gender", DDLGender.Text.Trim());
    cmd.Parameters.AddWithValue("@Birthdate", TbBirthdate.Text.Trim());
    cmd.Parameters.AddWithValue("@EmailAddress", TbEmailAddress.Text.Trim());
    cmd.Parameters.AddWithValue("@PhoneNumber", TbPhoneNumber.Text.Trim());
    cmd.Parameters.AddWithValue("@Address", TbAddress.Text.Trim());
    cmd.Parameters.AddWithValue("@PassportNumber", TbPassportNumber.Text.Trim());
    cmd.Parameters.AddWithValue("@Citizenship", DDLCitizenship.Text.Trim());
    cmd.Parameters.AddWithValue("@Visa", DDLVisa.Text.Trim());
    cmd.Parameters.AddWithValue("@Status", 1);

    cmd.ExecuteNonQuery();

    sqlConn.Close();

    Alert("Provider Information saved!");

    ClearControls();
}

您最好提供帶有列名的下拉列表。

所以,這樣說:

    protected void PopulateVisaType()
    {
        SqlConnection sqlConn = new SqlConnection("");

        using (SqlCommand cmd = new SqlCommand("SELECT VisaType FROM tblVisa ORDER BY VisaType ASC", sqlConn))
        {
            if (sqlConn.State == ConnectionState.Closed)
            {
                sqlConn.Open();
            }

            DDLVisa.DataSource = cmd.ExecuteReader();
            DDLVisa.DataValueField = "VisaType";
            DDLVisa.DataTextField = "VisaType";

            DDLVisa.DataBind();
            //DDLVisa.Items.Insert(0, new ListItem(""));   // optional blank row choice

            sqlConn.Close();
        }
    }

因此 TextField 和 DataText 字段需要是來自數據源的命名列。

如果您需要/想要/期望別無選擇,我還包含了一個可選的第一個空白選項。

但是,請記住,如果您不允許(或想要)空字符串,並且希望該值的空值,則應將此空字符串轉換為數據庫中的空值。 這適用於您的所有價值觀。 (也許存儲過程會這樣做?)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM