2010-08-20 8 views

Répondre

2

Abonnez-vous à la première valeur de combobox événement changé et peupler la seconde:

combobox1.SelectedIndexChanged+= new EventHandler(ListBox1_SelectedIndexChanged); 

private combobox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // do stuff with combobox2 
} 

ou

combobox1.SelectedValueChanged += new EventHandler(ListBox1_SelectedValueChanged); 

private combobox1_SelectedValueChanged(object sender, EventArgs e) 
{ 
    // do stuff with combobox2 
} 

Population:

combobox2.Items.Add(new object()); 
combobox2.Items.Add(new ListItem("caption", "value")); 
// etc 

Trouver un élément existant:

var index = combobox2.FindStringExact(combobox1.SelectedText); 
if (index != -1) 
    comobox2.SelectedItem = combobox2.Items[index]; 
+0

quelle est la syntaxe pour remplir la seconde? – ghd

+0

@sas: Voir ma mise à jour – abatishchev

+0

Je dois le faire quand la première liste déroulante obtient une valeur 'a' par exemple alors la deuxième liste déroulante devrait montrer automatiquement la dernière valeur dans la liste déroulante de la liste déroulante. Je ne suis pas en mesure d'obtenir la syntaxe pour mettre à jour la valeur de la deuxième zone de liste déroulante – ghd

9

Gérez l'événement SelectedIndexChanged pour le premier ComboBox, puis mettez à jour la deuxième zone de liste déroulante en fonction de la valeur SelectedItem pour le premier ComboBox.

Un exemple rapide (traitement des erreurs de sans lors de la récupération du SelectedItem):

public partial class Form1 : Form 
{ 
    private string[] comboBox1Range = new[] { "A", "B", "C", "D" }; 
    private string[] comboBox2RangeA = new[] { "A1", "A2", "A3", "A4" }; 
    private string[] comboBox2RangeB = new[] { "B1", "B2", "B3", "B4" }; 
    private string[] comboBox2RangeC = new[] { "C1", "C2", "C3", "C4" }; 
    private string[] comboBox2RangeD = new[] { "D1", "D2", "D3", "D4" }; 

    public Form1() 
    { 
     InitializeComponent(); 
     comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; 
     comboBox1.Items.AddRange(comboBox1Range); 
    } 

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string selectedValue = comboBox1.SelectedItem as string; 

     switch (selectedValue) 
     { 
      case "A": 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(comboBox2RangeA); 
       break; 
      case "B": 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(comboBox2RangeB); 
       break; 
      case "C": 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(comboBox2RangeC); 
       break; 
      case "D": 
       comboBox2.Items.Clear(); 
       comboBox2.Items.AddRange(comboBox2RangeD); 
       break; 
     } 
    } 
} 
0

Exemple de code, Winform avec deux ComboBoxes DataBound à deux tables dans un ensemble de données. Tableau "LstCountries" liste des pays actuels Tableau "lstState" liste de tous les états/provinces pour tous les pays.

Tableau lstCountries (Int32 CountryID, chaîne CountryName) Tableau lstStates (Int32 StateID, Int32 CountryID, chaîne StateName)

Dans ce code, je remplir cboState sur la base de la valeur sélectionnée cboCountry tandis que les deux combodropdowns sont liés à des données tables extraites d'une base de données.

// Load data from database (not shown) 
// _dataSet.Tables["lstCountries"] datasource for cboCountry 
// _dataSet.Tables["lstStates"] datasource for cboState 
// 
// cboCountry - comboDropDown - List on countries 
// cboState = comboDropDown - List of states 

// Use boolean bloading to prevent setting datasource for cboState when cboCountry is intially loaded. 

    void cboCountry_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     ComboBox cbo = (sender as ComboBox); 
     if (cbo.SelectedIndex > -1 && !bloading) 
     { 
      Int32 countryID = Convert.ToInt32(((System.Data.DataRowView)(cbo.SelectedItem)).Row.ItemArray[0].ToString()); 

      cboState.Text = ""; 
      DataView view = _dataSet.Tables["lstStates"].DefaultView; 
      view.RowFilter = string.Format("CountryID={0}", countryID); 
      DataTable table = view.ToTable(); 
      cboState.DataSource = table; 
      cboState.SelectedIndex = -1; 
    } 
0

Je veux sélectionner Ders cette cmbDers puis SQL mise à jour liée cmbKonu comme ce pays-Ville. Mais je reçois une incompatibilité de type de données. Quel est le problème?

Charge de formulaire OleDbDataAdapter adp = new OleDbDataAdapter ("select * from Ders", baglanti); DataTable dt = new DataTable(); baglanti.Open(); adp.Fill (dt); cmbDers.DataSource = dt; cmbDers.DisplayMember = "DersAd"; cmbDers.ValueMember = "DersID"; baglanti.Close();

private void cmbDers_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataTable dt = new DataTable(); 
    OleDbDataAdapter adp = new OleDbDataAdapter ("select * from Konu where DersID = '" +cmbDers.SelectedItem+"'",baglanti); 
    adp.Fill(dt); 
    cmbKonu.DataSource = dt; 
    cmbKonu.DisplayMember = "KonuAd"; 
    cmbKonu.ValueMem`enter code here`ber = "KonuID"; 
    baglanti.Close();`enter code here` 
Questions connexes