【问题标题】:C# Switch statement querying MYSQL databaseC#switch语句查询MYSQL数据库
【发布时间】:2013-11-21 18:36:48
【问题描述】:

我正在尝试构建一个程序,如果用户从下拉列表中选择某些内容,则会根据选择的内容显示一个标签。

EG:

从下拉列表中选择狗,标签将显示“狗是 20 英镑”

从下拉列表中选择猫,标签将显示“猫是 15 英镑”

我做的不对,我已经做了好几个小时了,任何帮助都将不胜感激。

到目前为止的代码

DataSet ds = new DataSet();
MySqlConnection cs = new MySqlConnection(@"SERVER= 000.000.00.000;username=myusername;password=******; Initial Catalog = mydatabase");
MySqlDataAdapter da = new MySqlDataAdapter();

protected void Page_Load(object sender, EventArgs e)
{
   MySqlCommand cd = new MySqlCommand("SELECT * FROM pets", cs);
   cs.Open();
   MySqlDataReader ddl = cd.ExecuteReader();
   DdPetPist.DataSource = ddl;
   DdPetPist.DataValueField = "Specie";
   DdPetPist.DataTextField = "Specie";
   DdPetPist.DataBind();
   cs.Close();
   cs.Dispose();
}

选择索引更改

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   MySqlCommand cd = new MySqlCommand("SELECT CAST(Specie AS varchar) + '#' + CAST(Specie_Price AS varchar) AS Specie FROM pets", cs);
   cs.Open();
   PetPrice.Text = Convert.ToString(cd.ExecuteReader());
   cs.Close();
}  

请任何帮助都将非常有用

【问题讨论】:

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


    【解决方案1】:

    我会这样做:

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selection = DropDownList1.SelectedValue;
        string petPrice = string.Empty;
    
        MySqlCommand cd = new MySqlCommand(String.Format("SELECT Specie_Price FROM pets WHERE Specie ='{0}'",selection), cs);
        cs.Open();
        petPrice = Convert.ToString(cd.ExecuteScalar());
        cs.Close();
    
        petPrice.Text = String.Format("{0}  is £{1}", selection, petPrice);
    } 
    

    编辑:另外,在 page_Load 中,您需要将代码包装在 if(!IsPostBack) 中,如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
           MySqlCommand cd = new MySqlCommand("SELECT * FROM pets", cs);
           cs.Open();
           MySqlDataReader ddl = cd.ExecuteReader();
           DdPetPist.DataSource = ddl;
           DdPetPist.DataValueField = "Specie";
           DdPetPist.DataTextField = "Specie";
           DdPetPist.DataBind();
           cs.Close();
           cs.Dispose();
        }
    }
    

    【讨论】:

    • petPrice.Text = String.Format("{0} is £{1}", selection, petPrice); 的问题,但我会看看能否解决它
    • 另外,不要忘记在 Page_load 中使用if(!IsPostBack){} 包装代码。否则 DropDownList1.SelectedValue 将为空。
    • 嗯好的,再次感谢您
    • Top Marks @afzalulh 我只希望有一天能和你一样好,谢谢你。
    【解决方案2】:

    尝试从下拉列表中将 AutoPostBack 属性设置为 true。或者在这一行放一个断点

    PetPrice.Text = Convert.ToString(cd.ExecuteReader());
    

    告诉我“PetPrice.Text”有什么价值。

    【讨论】:

    • PetPrice.Text 将是查询将输出的标签,我认为我的查询有问题。
    【解决方案3】:

    您需要将 ExecuteReader 更改为 ExecuteScalar

    PetPrice.Text = Convert.ToString(cd.ExecuteScalar());
    

    您的 Page_Load 还会在每次加载时更新所有内容,包括回发。

    protected void Page_Load(object sender, EventArgs e)
    {
      if (!Page.IsPostBack) {
       MySqlCommand cd = new MySqlCommand("SELECT * FROM pets", cs);
       cs.Open();
       MySqlDataReader ddl = cd.ExecuteReader();
       DdPetPist.DataSource = ddl;
       DdPetPist.DataValueField = "Specie";
       DdPetPist.DataTextField = "Specie";
       DdPetPist.DataBind();
       cs.Close();
       cs.Dispose();
      }
    }
    

    【讨论】:

    • 嗯谢谢你的回复,我认为我的查询有问题,当我从下拉列表中选择不同的选项时,标签没有改变。
    • 看起来您也在每次页面加载时重新加载下拉列表。将 Page_Load 的内容包装在 if (!Page.IsPostBack) { } 块中。
    • 谢谢你,程序仍然没有做我想做的事,但我会继续努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多