3

私はC#の初心者です。ListViewにも入力されている項目名をユーザーが選択したときに、(そのサブ項目を含む)の項目を 1 つだけ表示する必要がありComboBoxます。

使用するイベント、つまりイベントを知っていますSelectedIndexChanged。しかし、私はその中で何をすべきかわかりません。

現在、XML ファイルとデータセットを含む別の大きなプロセスを使用しているため、プロジェクトがより複雑になっています。

ListViewは多くのアイテムが含まれています。にも同じ商品名がありComboBoxます。

時間があれば、私の非常に小さなプロジェクトを見てください。ダウンロード

編集:ここで「1つのアイテムのみを表示」とは、特定のアイテムを選択してすべてのアイテムを表示するのではなく、厳密に1つのアイテムのみを表示することを意味します。

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

多くの試みを試みた後、DataSetorを使用して解決しましDataTableた。ここでは、リスト ビュー アイテムに加えられた変更を保存する必要があり、それらの変更をDataSetorに保存しDataTableて、それらのアイテムを後で呼び出せるようにする必要があるためです。

于 2012-10-24T08:47:53.060 に答える