2013-11-23 3 views
0

У меня есть 2 выпадающего списка ddlcountry и DdPetPist. ddlcountry имеет свою таблицу в базе данных MYSQL и поэтому дозу DdPetPist, я бы хотел ddlcounty выбор, чтобы изменить таблицу, заполняющую DdPetPist. поэтому измените таблицу с UK_Animals на France_Animals. или `Germany_Animals.Изменить выпадающий список в зависимости от выбора C#

Код, который населяет выпадающий список

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

на изменение выбора для ddlcountry

protected void ddlcountry_SelectedIndexChanged(object sender, EventArgs e) 
    { 

    } 

ретранслировать бы признателен, если кто-то может помочь.

+1

Ваш MySqlDatareader и выпадающее меню имеют одинаковое имя - ddlcountry. Сначала измените один из них. – afzalulh

ответ

2

Надежда, что я правильно понимаю:.

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(); 
    } 
} 
+1

+1 для чистой конкатенации строк. – afzalulh

+0

Фантастический сработал, спасибо. – Beep

+0

Я не уверен на 100%, как ASP.Net выполняет валидацию выпадающих значений, но убедитесь, что хакер не может изменить значение страны в HTML на что-то вроде «Пользователи» (которое может выбрать из вашей учетной записи пользователя стол, если он у вас есть). Лучшим подходом, вероятно, было бы отрубить всех, кроме первых двух символов, от имени страны. – nemec

2

Попробуйте

Я предполагаю, что ddlcountry содержит точно такое же название страны в качестве имени таблицы (то есть Великобритания, Франция и т.д.) и название таблиц (UK_Animals, France_Animals)

protected void ddlcountry_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string country = ddlcountry.SelectedValue; 
    string query = "SELECT * FROM "+ country + "_Animals"; 

    MySqlCommand cd = new MySqlCommand(query, cs); 
    cs.Open(); 
    MySqlDataReader ddlSpecie = cd.ExecuteReader(); 
    DdPetPist.DataSource = ddlSpecie; 
    DdPetPist.DataValueField = "Specie"; 
    DdPetPist.DataTextField = "Specie"; 
    DdPetPist.DataBind(); 
    cs.Close(); 
    cs.Dispose(); 
} 
+0

Спасибо, что работа в дозе, к сожалению, я уже принял ответ @Tinwor, который работает. в любом случае, спасибо. – Beep