【问题标题】:Multiple drop down list change each overs Tables C# and MySql query多个下拉列表更改每个 overs 表 C# 和 MySql 查询
【发布时间】:2013-12-08 15:02:35
【问题描述】:

好的我有2个下拉列表,如果用户从ddlcountry 987654322 @ table ove @ 987654322以及选择英国或德国填充英国桌子时,@ 987654322或德国表。这很好用。 问题是我有一个标签打印出来,显示从 UK_Animals 表中提取的 pricestock 两件事。 如何更改我的表格查询以显示stockprice,具体取决于当前选择的动物如果用户选择狗,它将显示信息但仅适用于英国的狗。我需要它,所以这个标签会随着国家表的变化而变化。

两个下拉列表

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

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

【问题讨论】:

    标签: c# mysql sql concatenation


    【解决方案1】:

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

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

    更新

    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

    【讨论】:

    • 谢谢你,我会试一试,然后回复你。
    • @Beep OK。期待您的回复。
    • 好的我明白你在说什么,我会修复它,所以我不会重复连接字符串。 DropDownList1_SelectedIndexChanged 中的两个查询是否有办法编写它们以便根据不同国家/地区的选择进行调整,或者我需要为每个国家/地区编写单独的查询并有一个 if else 语句进行相应的更改。
    • @Beep 实际上,有一个非常简单的方法:当您选择国家时,DdPetPist 的 DataSource 会更新到正确的表中。也就是说,当你在 DropDownList1_SelectedIndexChanged 中时,DdPetPist 实际上包含了目标国家的所有动物,不是吗?您在组合框中看不到您选择的国家/地区的动物更新了吗?
    • @Beep 让我更新我的答案,以便您清楚地理解我的意思。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多