从listView中只选择一个项目

时间:2012-10-20 15:42:32

标签: c# .net winforms listview

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

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

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

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

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

编辑:此处“仅显示一个项目”表示仅严格显示一个项目,而不是选择特定项目并显示所有项目。

2 个答案:

答案 0 :(得分: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. 修改 ComboBox ListView SelectedIndexChanged 事件,如下所示:

    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;
        }
    }
    
  5. 通过遵循此方法,您甚至无需匹配商品的订单。

    快乐编码......

答案 1 :(得分:0)

尝试多次尝试后,我决定使用DataSetDataTable,因为我们需要保存对列表视图项所做的更改,这些更改应保存在DataSet或{ {1}}以便稍后可以召回这些项目。