2012-10-20 207 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使入駐後那些物品可以稍後回憶。

相關問題