【问题标题】:City instead of id seems on dropdownlist value城市而不是 id 似乎出现在下拉列表值上
【发布时间】:2011-11-01 08:21:57
【问题描述】:

加载下拉列表时出现问题,下拉列表值上显示的是城市而不是 id。有什么问题?

#region CITIES
public List<ListItem> loadCities()
{
    using (SqlConnection conn = new SqlConnection(DataBase.Conn))
    {
        conn.Open();
        string query = "SELECT * FROM Cities";
        using (SqlCommand cmd = new SqlCommand(query, conn))
        {
            SqlDataReader dr = cmd.ExecuteReader();
            List<ListItem> li = new List<ListItem>();
            try
            {
                while (dr.Read())
                {
                    li.Add(new ListItem(dr["Cities"].ToString(), dr["Id"].ToString()));
                }
            }
            catch (Exception)
            {
                throw;
            }
            return li;
        }
    }
}
#endregion

【问题讨论】:

  • dr["Cities"] 行看起来很可疑。列名真的是Cities吗?
  • 使用名为“调试”的忍者技术!
  • 你的桌子是什么样子的?
  • 是的,列名确实是城市。
  • ID 列有值吗?

标签: c# asp.net generic-list listitem generic-collections


【解决方案1】:

如果你的桌子是这样的

ID | Cities
 1 | New York
 2 | Paris

那么您的列表应该显示“纽约”和“巴黎”,并且使用SelectedValue 属性,您应该得到1 或2。

你的桌子和我的例子一样吗?

你在用SelectedValue吗?

【讨论】:

  • 是的。我不使用选定的值。
  • @GoranZooferic:如果您不使用 SelectedValue,那可能就是问题所在。你在用什么?
【解决方案2】:

由于调试数据读取器并不总是那么容易,您可以将内容存储在一个变量中,然后进行检查:

while (dr.Read())
{
    String value = dr["Id"].ToString();
    String text =  dr["Cities"].ToString();
    li.Add(new ListItem(text, value));
}

然后在li.Add 上设置断点,检查valuetext 变量是否包含您需要的内容。

【讨论】:

  • 我刚刚调试。值的变量出现在这个 value="1" text ="Tbilisi"。
  • 我刚刚创建了一个关于这个问题的样本。你能检查一下吗? hotfile.com/dl/133925859/7a97eba/ListIssue.rar.html
  • 我没有下载代码来提供帮助。您应该在问题中显示相关代码。查看SelectedValue 提示您检索项目的Value。如果填写列表有效,那么就是检索出了问题。看那里。
  • 我为什么要使用 SelectedValue?我想在运行时加载下拉列表中的所有城市。
【解决方案3】:
    public List<City> GetCities()
    {
        try
        {
            List<City> cityList = new List<City>();

            using (sqlCon = new SqlConnection(Database.GetConnectionString()))
            {
                sqlCmd = new SqlCommand("sp_Cities", sqlCon);

                sqlCmd.Parameters.AddWithValue("@Mode", 1);

                sqlCmd.CommandType = System.Data.CommandType.StoredProcedure;

                if (sqlCon.State != System.Data.ConnectionState.Open)
                {
                    sqlCon.Open();
                }

                sqlReader = sqlCmd.ExecuteReader();

                using (sqlReader)
                {
                    if (sqlReader.HasRows)
                    {
                        City c = new City();

                        while (sqlReader.Read())
                        {
                            c = new City ();

                            c.ID = Convert.ToInt32(sqlReader["ID"]);
                            c.Name = Convert.ToString(sqlReader["Name"]);

                            cityList.Add(c);
                        }
                    }
                }
            }


            return cityList;
        }
        catch (Exception)
        {

            throw;
        }
    }

您可以创建一个具有两个属性(如 ID 和 CityName)的类,并创建该类的对象和该类型的列表,然后迭代 sqlReader 并将对象添加到列表中,然后您可以像这样分配给下拉列表

    private void LoadCities()
    {
        try
        {
            List<City> cityList = new cityBLL().GetAllcity();                

            ddlGender.DataSource = cityList;
            ddlGender.DataTextField = "Name";
            ddlGender.DataValueField = "ID";
            ddlGender.DataBind();
        }
        catch (Exception)
        {

            throw;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多