多个下拉列表更改每个表C#和MySql查询

时间:2013-11-23 19:22:56

标签: c# mysql sql concatenation

好的我有2个下拉列表,当选择时,每个结果都会影响,如果用户从ddlcountry选择法国,那么DdPetPist填充了France_Animals表,当选择英国或德国时,它会填充无论是英国餐桌还是德国餐桌。这很好用。 问题是我打印出一个标签,显示从UK_Animals表中提取的pricestock两件事。 我如何更改我的表格查询以显示stockprice,具体取决于当前用户选择的动物,如果用户选择它将显示信息但仅适用于英国的狗。我需要它,所以这个标签随国家表格而变化。

两个DropDown列表

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            MySqlCommand cd2 = new MySqlCommand("SELECT * FROM Country", cs); // need to make it so changes database
            cs.Open();
            MySqlDataReader ddlCountry = cd2.ExecuteReader();
            ddlcountry.DataSource = ddlCountry;
            ddlcountry.DataValueField = "Country";
            ddlcountry.DataTextField = "Country";
            ddlcountry.DataBind();
            cs.Close();
            cs.Dispose();

            MySqlCommand cd = new MySqlCommand("SELECT * FROM UK_Animals", cs);
            cs.Open();
            MySqlDataReader ddlSpecie = cd.ExecuteReader();
            DdPetPist.DataSource = ddlSpecie;
            DdPetPist.DataValueField = "Specie";
            DdPetPist.DataTextField = "Specie";
            DdPetPist.DataBind();
            cs.Close();
            cs.Dispose();
        }
    }

选择不同国家/地区时更改表格的代码

 protected void ddlcountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (ddlcountry.Text != string.Empty)
        {
            MySqlCommand cd = new MySqlCommand(string.Format("SELECT * FROM {0}_Animals", ddlcountry.Text), cs);
            cs.Open();
            MySqlDataReader ddlSpecie = cd.ExecuteReader();
            DdPetPist.DataSource = ddlSpecie;
            DdPetPist.DataValueField = "Specie";
            DdPetPist.DataTextField = "Specie";
            DdPetPist.DataBind();
            cs.Close();
            cs.Dispose();
        }
    }  

根据动物选择更改标签的代码( 但剂量未更改为动物表 这是我不能改变为共同发展国家的选择它始终在英国,我知道为什么但不知道如何解决它所以它随国家选择而变化。

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selection_price = DdPetPist.SelectedValue;
        string selection_stock = DdPetPist.SelectedValue;
        string petPrice = string.Empty;
        string available = string.Empty;

        MySqlCommand cd_price = new MySqlCommand(String.Format("SELECT Specie_Price FROM UK_Animals WHERE Specie ='{0}'", selection_price), cs);
        MySqlCommand cd_available = new MySqlCommand(String.Format("SELECT Stock FROM UK_Animals WHERE Specie ='{0}'", selection_stock), cs);

         cs.Open();
             petPrice = Convert.ToString(cd_price.ExecuteScalar());
             available = Convert.ToString(cd_available.ExecuteScalar());
         cs.Close();

        PetPrice.Text = String.Format("Minimum Donation For A {0}  Is £{1}.", selection_price, petPrice);
        Availble.Text = String.Format("{0}'s Avalible {1}.", selection_stock, available);
    } 

请问有没有办法做到这一点,如果有,怎么办? 谢谢。

1 个答案:

答案 0 :(得分:1)

DropDownList1_SelectedIndexChanged中的两个查询都指向UK_Animals因此,您在ddlcountry_SelectedIndexChanged中选择的其他国家/地区的表格在写入标签时没有任何效果。

对于使用正确的国家/地区信息更新DdPetPist.DataSource,您应该从DropDownList1_SelectedIndexChanged访问此变量,而不是再次连接到数据库。或者,您可以通过选择相应国家/地区的表来保持与DB的连接;但是这个选项听起来不太合适:它将涉及不完全必要的数据库连接和全局变量。

更新

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    string selection_price = DdPetPist.SelectedValue;
    string selection_stock = DdPetPist.SelectedValue;
    string petPrice = string.Empty;
    string available = string.Empty;

    MySqlCommand cd_price = new MySqlCommand(String.Format("SELECT Specie_Price FROM {0}_Animals WHERE Specie ='{1}'", ddlcountry.Text, selection_price), cs);
    MySqlCommand cd_available = new MySqlCommand(String.Format("SELECT Stock FROM {0}_Animals WHERE Specie ='{1}'", ddlcountry.Text, selection_stock), cs);

    cs.Open();
    petPrice = Convert.ToString(cd_price.ExecuteScalar());
    available = Convert.ToString(cd_available.ExecuteScalar());
    cs.Close();

    PetPrice.Text = String.Format("Minimum Donation For A {0}  Is £{1}.", selection_price, petPrice);
    Availble.Text = String.Format("{0}'s Avalible {1}.", selection_stock, available);
} 

这是“选项2”;最好的选择是调整这些查询,以便从DdPetPist.DataSource中存储的给定国家/地区的表的本地副本中读取。