2012-10-20 210 views
3

我是c#的初学者。我需要仅显示ListView(及其子项)中的一个项目,当用户选择也在ComboBox中填充的项目名称时。从列表中选择一个项目

我知道要使用的事件,即SelectedIndexChanged事件。但我不知道该怎么做。

目前我正在使用包含XML文件和数据集的替代大流程,这使得我的项目更加复杂。

ListView有很多项目。相同的项目名称也在ComboBox

如果你有时间,请看看我这个非常小的项目。 download

编辑:这里的“显示只有一个项目”是指严格只显示一个项目,而不是选择特定项目,并显示所有项目。

+0

为什么列表视图中有很多项目,如果你想它只显示从组合框中选择的一个项目?另外,显示一些代码可能会有帮助。 – LightStriker

+0

当用户从组合中选择时,卸载ListView,然后重新加载,就像你已经做的那样 - 但限制它。如:“如果item.Name == comboBox.SelectedItem.ToString()”(伪代码)。 –

回答

5

你为什么不只是使用这段代码来获得期望的结果:

新增:

遵循以下步骤:

  1. 创建国家一流如下:

    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. 填充国家信息按照您的要求,如下图所示:

    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. 修改* frmFlag_Load *事件,如下图所示:

    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. 修改的SelectedIndexChanged您组合框事件和ListView如下图所示:

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

通过遵循这种方法,您甚至不需要匹配您的物品的顺序。

编码快乐......

+0

谢谢你的回应,这是行不通的。 –

+1

应该工作,你有两个控件相同的项目? –

+0

是的,我有同样的项目..项目具有相同的名称,也是区分大小写的 –

0

尝试许多尝试我使用DataSetDataTable因为在这里我们需要保存到列表视图中的项目所做的更改,这些更改应保存在DataSetDataTable使入驻后那些物品可以稍后回忆。

相关问题