获取下拉项值的数据库ID

时间:2017-04-10 14:14:00

标签: c# sql asp.net drop-down-menu webforms

免责声明 - 是的我用谷歌搜索,显然我没有找到解决方案。

Webform,ASP.NET,SQL,没有sqldatasource - 所有代码隐藏。

好吧,看起来我误解了我的应用程序出了什么问题。

使用.SelectedValue确实获得了下拉项的正确值 - 但仅在我的Insert()方法中,.SelectedValue在我的UpdateMethod中返回空。

插入()

                    using (con = new SqlConnection(conString))
                {
                    try
                    {
                        con.Open();

                        cmd = new SqlCommand("INSERT INTO Building(Building_Code, Building_Name, Company_ID, Active) VALUES(@BuildingCode, @BuildingName, @CompanyID, @Active)", con);
                        cmd.Parameters.AddWithValue("@BuildingCode", txtBuildingCode.Text);
                        cmd.Parameters.AddWithValue("@BuildingName", txtBuildingName.Text);
                        cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue);
                        cmd.Parameters.AddWithValue("@Active", chkBuildingActive.Checked);

                        cmd.ExecuteNonQuery();

                    }

更新()

                    using (con = new SqlConnection(conString))
                {
                    try
                    {
                        if (ddlCompanyCode.SelectedIndex >= 1)
                        {

                            con.Open();

                            cmd = new SqlCommand("UPDATE Building SET Building_Name = @BuildingName, Company_ID = @CompanyID, Active = @Active WHERE Building_ID = @BuildingID", con);
                            cmd.Parameters.AddWithValue("@BuildingID", selectedRecordID);
                            cmd.Parameters.AddWithValue("@BuildingName", txtBuildingName.Text);
                            cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue);
                            cmd.Parameters.AddWithValue("@Active", chkBuildingActive.Checked);

                            cmd.ExecuteNonQuery();
                        }
                    }
                    catch (SqlException sqlExc)
                    {
                        MessageBox.Show(sqlExc.Message);
                    }
                }

BindForm()

                try
            {
                con.Open();

                reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    txtBuildingCode.Text = reader["Building_Code"].ToString();
                    txtBuildingName.Text = reader["Building_Name"].ToString();
                    ddlCompanyCode.SelectedItem.Text = reader["Company_Code"].ToString();
                    chkBuildingActive.Checked = reader.GetBoolean(reader.GetOrdinal("Active"));
                }
            }
            catch (SqlException sqlExc)
            {
                MessageBox.Show(sqlExc.Message);
            }

什么会导致这个问题?

2 个答案:

答案 0 :(得分:0)

而是使用ddlCompanyCode.DataValueField使用SelectedValue属性

cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedValue);

你也可以使用SelectedItem.Value之类的

cmd.Parameters.AddWithValue("@CompanyID", ddlCompanyCode.SelectedItem.Value);

答案 1 :(得分:0)

呜!我从朋友那里得到了解决方案。

为公司代码值

创建一个局部变量
        string strCompany = "";

将datareader的内容读取到变量

                            txtBuildingCode.Text = reader["Building_Code"].ToString();
                            txtBuildingName.Text = reader["Building_Name"].ToString();
                            strCompany = reader["Company_Code"].ToString();

然后通过

将下拉菜单的SelectedIndex设置为项目索引
ddlCompanyCode.SelectedIndex = ddlCompanyCode.Items.IndexOf(ddlCompanyCode.Items.FindByText(strCompany));

感谢大家的帮助!