【问题标题】:Populating my drop down list C# asp.net填充我的下拉列表 C# asp.net
【发布时间】:2013-11-19 00:35:46
【问题描述】:

我正在尝试获取一个下拉列表以显示来自 MYSQL 数据库的数据,数据库表名为 Pet,我正在尝试从 Specie 获取信息。 现在代码对我来说看起来不错,但它没有运行,所以最好让另一双眼睛检查它。 谢谢, 感谢所有帮助。 连接字符串

   MySqlConnection cs = new MySqlConnection(@"Data Source = 000.000.00.000;username=benoatsc_admin;password=****; Initial Catalog = dbname; Integrated Security = true");

下拉代码

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        MySqlCommand cd = new MySqlCommand("SELECT * FROM Pet", cs);
        cs.Open();
        MySqlDataReader ddl = cd.ExecuteReader();

        DdPetList.DataSource = ddl;
        DdPetList.DataValueField = "Specie";
        DdPetList.DataTextField = "Specie";
        DdPetList.DataBind();
        cs.Close();
        cs.Dispose();
    }

【问题讨论】:

  • “未运行”是什么意思(错误消息、行为、日志...)?请具体。另外,您希望这段代码何时运行?
  • 对不起,我的意思是我的程序运行了,但是下拉列表没有填充任何数据,它是空白的。
  • 您希望何时填充列表?如果是在你加载页面的时候,说明你使用了错误的方法。
  • SJuan76,非常感谢!总是最简单的问题会造成如此大的压力,当你从另一个人那里得到它时就很简单,再次感谢。
  • 是的,你应该使用它。

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


【解决方案1】:

这里有几个问题:

  1. 您应该将此代码移至Page_Load 方法。我假设您希望在为用户加载页面时填充此 DropDownList。否则,DropDownList 永远不会填充 MySQL 数据库中的数据,因此当没有可能更改的索引时,您将无法触发 SelectedIndexChanged 事件。

  2. MySQL 连接器/网络使用unmanaged resources。这些应该在使用完毕后处理。 .NET Framework 提供了一种优雅的方式来确保使用非托管资源的对象以 using statements 的形式处理。使用它们是最佳实践。

  3. MySqlConnectionMySqlDataReader 等不仅应在使用完毕后丢弃,还应关闭。幸运的是,当在这些对象上调用 dispose() 时,它们的 close() 方法也会被调用。

因此,将所有这些拼凑在一起就产生了这段代码:

protected void Page_Load(object sender, EventArgs e)
{
    using (var conn = new MySqlConnection(/* Your connection string here */))
    {
        conn.Open();
        using (var cmd = new MySqlCommand("SELECT * FROM Pet", conn))
        {
            using (var reader = cmd.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    DropDownList1.DataSource = reader;
                    DropDownList1.DataValueField = "Specie";
                    DropDownList1.DataTextField = "Specie";
                    DropDownList1.DataBind();
                }
            }
        }
    }
}

我希望这一切都会有所帮助。如果您需要任何澄清,我很乐意提供。

【讨论】:

  • 嗨 Derek,非常感谢您的回答提供了非常丰富的信息,我现在将对我的程序进行调整。
  • 问题是,我在public partial class _Default : Page 中调用了我的连接字符串,因为我在数据网格视图中使用它并通过文本框输入。
【解决方案2】:

这将是一个评论,但我没有声誉,

您收到什么错误消息?

您的连接字符串已将受信任的连接设置为 true 并且您正在提供凭据, 删除其中一个。

【讨论】:

  • 感谢关于 CS 的建议。删除了一个。关于我的程序运行的问题,它只是下拉列表没有填充任何数据。
  • 很明显,你肯定得到数据吗? IE 如果你在执行 reader 后断点并检查 ddl 的内容,还要检查你的列名吗?并可能交换您的 datavaluefield 和 datatextfield 顺序(有点荒谬,但它发生在我身上)
  • 正在工作,但在错误的课程中。已移至页面加载类,感谢您的帮助。
  • 好消息,随时 :)
  • Page_Load 是一个方法,而不是一个
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多