【问题标题】:Getting database ID for the value of drop down item获取下拉项值的数据库 ID
【发布时间】:2017-04-10 14:14:00
【问题描述】:

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

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);
            }

什么会导致这个问题?

【问题讨论】:

  • @TamásSzabó DropDownList 上没有这样的属性。
  • DropdownList Item 的索引是否与 Selected Company_ID 匹配?在 DropDownList 的 SelectedIndexChanged 事件中执行更新数据库的代码?
  • 公司的 ddl 索引不匹配。我没有任何 SelectedIndexChanged。
  • 也许尝试在两个字段中放入 Company_Id,如 DataTextField 和 DataValueField,以进行调试并检查它。您在 Company_Code 字段中有重复项吗?

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


【解决方案1】:

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

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

你也可以像SelectedItem.Value一样使用

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

【讨论】:

  • .SelectedValue 返回下拉的文本,我需要值的ID。
  • 我仍然只是获取文本值而不是 ID。当我进入代码时,我可以看到 ddlCompanyCode 有一个计数为 5 的项目集合(这是公司表中的记录),但我不知道如何访问该项目编号。
  • 看起来我误解了我的实际问题是什么,我已经编辑了我的问题以反映这一点。
【解决方案2】:

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

为公司代码值创建一个局部变量

        string strCompany = "";

将datareader的内容读取到变量中

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

然后将下拉的SelectedIndex设置为item index by

ddlCompanyCode.SelectedIndex = ddlCompanyCode.Items.IndexOf(ddlCompanyCode.Items.FindByText(strCompany));

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2021-03-25
    • 1970-01-01
    • 2020-09-02
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多