3

初心者の質問で申し訳ありませんが、ListViewItemsこれまで使用したことがなくListView、私がやろうとしているのは、すべてListViewItemsAnimalManagerクラスから UIlsbOverviewコントロールに戻すことです。このアプローチの理由は、Managerすべてのデータを処理して UI コントロールに返すクラスがあるためです。問題は、すべてのアイテムを元に戻す方法lsboverView ListViewです。

    // declared in AnimalManager class
    private static List<Animal> AnimalList { get; set; }


     public static ListViewItem DisplayAllAnimals()
    {
        //Show animals on ListView by proper column
        foreach (var animal in AnimalList)
        {
            ListViewItem item = new ListViewItem(animal.Id); // generated ID
            item.SubItems.Add(animal.AnimalSort); // AnimalSort
            item.SubItems.Add(animal.Name); //Name
            item.SubItems.Add(animal.Age); //Age
            item.SubItems.Add(animal.Gender.ToString()); // Animal gender

            return item;
        }

        // how to return all items back to UI ?
    }


    // Mainform UI class where its used
    lsbOverview.Items.Add(AnimalManager.DisplayAllAnimals());
4

4 に答える 4

2

これをお探しですか?

// declared in AnimalManager class
    private static List<Animal> AnimalList { get; set; }


     public static ListViewItem[] DisplayAllAnimals()
    {
        //Show animals on ListView by proper column
        var listViewItems = new List<ListViewItem>();
        foreach (var animal in AnimalList)
        {
            ListViewItem item = new ListViewItem(animal.Id); // generated ID
            item.SubItems.Add(animal.AnimalSort); // AnimalSort
            item.SubItems.Add(animal.Name); //Name
            item.SubItems.Add(animal.Age); //Age
            item.SubItems.Add(animal.Gender.ToString()); // Animal gender
            listViewItems.Add(item);

        }

        return listViewItems.ToArray();
    }


    // Mainform UI class where its used
    lsbOverview.Items.AddRange(AnimalManager.DisplayAllAnimals());
于 2013-03-08T10:40:26.053 に答える
1

あなたが望むのはこれだと思います:

    // declared in AnimalManager class
    private static List<Animal> AnimalList { get; set; }


     public static IEnumerable<ListViewItem> DisplayAllAnimals()
    {
        //Show animals on ListView by proper column
        foreach (var animal in AnimalList)
        {
            ListViewItem item = new ListViewItem(animal.Id); // generated ID
            item.SubItems.Add(animal.AnimalSort); // AnimalSort
            item.SubItems.Add(animal.Name); //Name
            item.SubItems.Add(animal.Age); //Age
            item.SubItems.Add(animal.Gender.ToString()); // Animal gender

            yield return item;
        }
    }


    // Mainform UI class where its used
    lsbOverview.Items.AddRange(AnimalManager.DisplayAllAnimals().ToArray());

編集: Add の代わりに AddRange 呼び出しに注意してください。IEnumerable<> と yield の詳細については、Google またはここで検索して理解を深めることをお勧めします。

于 2013-03-08T10:38:33.370 に答える
1

動物の配列を作成してから、リストビューで AddRange を使用するとうまくいくと思います。

public static List<ListViewItem> DisplayAllAnimals()
{
    var animals = new List<ListViewItem>();

    //Show animals on ListView by proper column
    foreach (var animal in AnimalList)
    {
        ListViewItem item = new ListViewItem(animal.Id); // generated ID
        item.SubItems.Add(animal.AnimalSort); // AnimalSort
        item.SubItems.Add(animal.Name); //Name
        item.SubItems.Add(animal.Age); //Age
        item.SubItems.Add(animal.Gender.ToString()); // Animal gender

        animals.Add(item);
    }

    return animals;
}


lsbOverview.Items.AddRange(AnimalManager.DisplayAllAnimals().ToArray());
于 2013-03-08T10:44:53.913 に答える
0

あなたはyield returnを返すために使用することができますIEnumerable<ListViewItem>

public static IEnumerable< ListViewItem> DisplayAllAnimals()
{
    //Show animals on ListView by proper column
    foreach (var animal in AnimalList)
    {
        ListViewItem item = new ListViewItem(animal.Id); // generated ID
        item.SubItems.Add(animal.AnimalSort); // AnimalSort
        item.SubItems.Add(animal.Name); //Name
        item.SubItems.Add(animal.Age); //Age
        item.SubItems.Add(animal.Gender.ToString()); // Animal gender

        yield return item;
    }


}

あなたはこれを次のように使うことができます:

lsbOverview.Items.AddRange(AnimalManager.DisplayAllAnimals().ToArray());
于 2013-03-08T10:40:36.723 に答える