2012-10-20 9 views
3

Je suis débutant dans C#. Je n'ai besoin d'afficher qu'un seul élément du ListView (avec ses sous-éléments), lorsque l'utilisateur sélectionne un nom d'élément qui est également renseigné dans ComboBox.Sélectionnez un seul article dans la listeVoir

Je connais l'événement à utiliser, c'est-à-dire l'événement SelectedIndexChanged. Mais je ne sais pas quoi faire là-dedans.

Actuellement j'utilise un grand processus alternatif qui inclut un fichier XML et un ensemble de données qui rend mon projet plus complexe. Le ListView contient beaucoup d'éléments. Les noms des mêmes articles se trouvent également au ComboBox.

Si vous avez le temps s'il vous plaît jeter un oeil à mon très petit projet. download

EDIT: Ici « Afficher un seul élément » signifie montrer strictement un seul élément, sélectionnez pas l'élément particulier et montrer tous les éléments.

+0

Pourquoi la liste contient-elle beaucoup d'éléments si vous voulez qu'elle n'en affiche qu'une sélectionnée dans la liste déroulante? De plus, montrer du code pourrait aider. – LightStriker

+0

Lorsque l'utilisateur sélectionne dans la liste déroulante, déchargez ListView et rechargez de la même manière que vous le faites déjà, mais en le limitant. Tels que: "If item.Name == comboBox.SelectedItem.ToString()" (pseudo-code). –

Répondre

5

Pourquoi ne pas utiliser tout ce morceau de code pour obtenir les résultats souhaités:

AJOUTÉE:

Procédez comme suit:

  1. créer une classe de pays comme suit :

    class Country 
    { 
        public string Name { get; set; } 
        public string Flag { get; set; } 
        public string Continent { get; set; } 
        public string Capital { get; set; } 
        public string Population { get; set; } 
        public string Currency { get; set; } 
    } 
    
  2. Renseignez les informations pays selon vos besoins, comme indiqué ci-dessous:

    List<Country> countryList = new List<Country>() { 
        new Country() { Name = "India", Capital = "Delhi", Continent = "Asia", Currency = "Rupee", Population = "1.2 Billion", Flag = "india.gif" }, 
        new Country() { Name = "Pakistan", Capital = "Islamabad", Continent = "Asia", Currency = "Rupee", Population = "0,5 Billion", Flag = "pakistan.gif" }, 
        new Country() { Name = "Sri Lanka", Capital = "Kotte", Continent = "Asia", Currency = "SriLankan Rupee", Population = "20277597", Flag = "sri_lanka.gif" } 
    }; 
    
  3. Modifier * frmFlag_Load * événement comme indiqué ci-dessous:

    private void frmFlag_Load(object sender, EventArgs e) 
    { 
        lvMain.Items.Clear(); 
        tlstrpcmbCountries.Items.Clear(); 
    
        tlstrpcmbCountries.Items.Add("All"); 
        for (int i = 0; i < countryList.Count; i++) 
        { 
         tlstrpcmbCountries.Items.Add(countryList[i].Name); 
        } 
    
        tlstrpcmbCountries.SelectedIndex = 0; 
        tlstrpcmbViews.SelectedIndex = 0; 
    } 
    
  4. Modifier le SelectedIndexChanged événement de votre ComboBox et ListView comme indiqué ci-dessous:

    private void tlstrpcmbCountries_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        var country = countryList.Where(c => c.Name.Equals(tlstrpcmbCountries.SelectedItem.ToString())).Select(s => s).FirstOrDefault(); 
    
        if (country != null) 
        { 
         lvMain.Items.Clear(); 
    
         ListViewItem item = new ListViewItem(country.Name, country.Flag); 
    
         item.SubItems.Add(country.Continent); 
         item.SubItems.Add(country.Capital); 
         item.SubItems.Add(country.Population); 
         item.SubItems.Add(country.Currency); 
         lvMain.Items.Add(item); 
    
         lvMain.EnsureVisible(0); 
         item.Selected = true; 
         item.Focused = true; 
         lvMain.Select(); 
        } 
    } 
    
    private void lvMain_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        if (lvMain.SelectedItems.Count > 0) 
        { 
         var selected = lvMain.SelectedItems[0]; 
         lblCountryName.Text = selected.SubItems[0].Text; 
         lblContinent.Text = selected.SubItems[1].Text; 
         lblCapitalCity.Text = selected.SubItems[2].Text; 
         lblPopulation.Text = selected.SubItems[3].Text; 
         lblCurrencyName.Text = selected.SubItems[4].Text; 
        } 
    } 
    

En suivant cette approche, vous n'avez même pas besoin de faire correspondre l'ordre de vos articles.

codage heureux ...

+0

Merci pour la réponse, cela ne fonctionne pas .. –

+1

Devrait fonctionner, avez-vous les mêmes éléments dans les deux contrôles? –

+0

oui j'ai les mêmes articles .. les articles ont les mêmes noms avec également sensible à la casse –

0

Après avoir essayé de nombreuses tentatives je me suis installé avec l'aide DataSet ou DataTable parce qu'ici nous devons enregistrer les modifications apportées à la vue de la liste des éléments et ces modifications doivent être enregistrées dans DataSet ou DataTable de telle sorte que ces articles peuvent se rappeler plus tard.

Questions connexes