3

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

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

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

里面有ListView很多东西。相同的项目名称也在ComboBox.

如果你有时间,请看看我的非常小的项目。下载

编辑:这里“仅显示一项”意味着严格只显示一项,而不是选择特定项目并显示所有项目。

4

2 回答 2

5

为什么不直接使用这段代码来获得想要的结果:

添加:

按着这些次序:

  1. 创建一个 Country 类,如下所示:

    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. 修改ComboBoxListView的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;
        }
    }
    

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

快乐的编码...

于 2012-10-20T15:54:42.160 回答
0

在尝试了许多尝试后,我决定使用DataSetorDataTable因为在这里我们需要保存对列表视图项目所做的更改,并且这些更改应该保存在DataSetorDataTable以便这些项目以后可以调用。

于 2012-10-24T08:47:53.060 回答