none
DataGrid.ItemsSourceへの不定件数のデータバインディングについて RRS feed

  • 質問

  • 先月よりWPFとC#にて開発の勉強を始めた者です。よろしくお願いいたします。

    DataGridにデータをバインドする場合に以下のような例をたくさん見かけます。
    この場合はデータの数が3件の場合ですがその数が不特定の場合はどのように処理するのでしょうか?

    [Person.cs]
    public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public int Gender { get; set; } // 0 = default, 1 = male, 2 = female

        public Person(string name, int age, int gender)
        {
            this.Name = name;
            this.Age = age;
            this.Gender = gender;
        }
    }

    [Form.cs]
    Person[] persons = {
        new Person("Tanaka", 24, 1),
        new Person("Yamada", 22, 1),
        new Person("Wannabe", 21, 2),
    };
    DataGrid1.ItemsSource = persons;

    以下のような17桁で繰り返すテキストを読み出しながら処理する場合などです。
    [Person.txt]
    Tanaka     24   1Yamada     22   1Wannabe    21   2Kawakami   23   2

    テキストの全内容をstLineとした場合、最初の『Tanaka』から読み出すと
    int i = new int();
    string rName = stLine.Substring(0 + (17 * i), 10).Trim();
    int rAge = int.Parse(stLine.Substring(10 + (17 * i), 3);
    int rGender = int Parse(stLine.Substring(16 + (17 * i), 1):
    のような処理で順序に取得することができると思いますがこれを
    DataGrid1.ItemsSourceに取り込む方法がわかりません。
    テキストの内容は常に変動し、件数が変化するものとします。

    以上、よろしくお願いいたします。
    2016年12月19日 0:58

回答

  • Person型の配列を作るのではなく、コレクションにPsersonを入れて管理すると良いです。
    コレクションはWPFではよくObservableCollectionが使われます。これは、コレクションの変化を通知する機能があらかじめ実装されているからです。
    例えば次のような感じになります。

    var persons = new ObservableCollection<Person>();
    
    persons.Add(new Person("Tanaka", 24, 1));
    persons.Add(new Person("Yamada", 22, 1));
    persons.Add(new Person("IWannabe", 21, 2));
    実際にはPerson.txtを読みながら、Addメソッドで追加していって下さい。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年12月19日 1:12
    モデレータ

すべての返信

  • Person型の配列を作るのではなく、コレクションにPsersonを入れて管理すると良いです。
    コレクションはWPFではよくObservableCollectionが使われます。これは、コレクションの変化を通知する機能があらかじめ実装されているからです。
    例えば次のような感じになります。

    var persons = new ObservableCollection<Person>();
    
    persons.Add(new Person("Tanaka", 24, 1));
    persons.Add(new Person("Yamada", 22, 1));
    persons.Add(new Person("IWannabe", 21, 2));
    実際にはPerson.txtを読みながら、Addメソッドで追加していって下さい。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2016年12月19日 1:12
    モデレータ
  • 早速の回答ありがとうございました。

    無事にループ処理にてデータをコレクションに保存し、DataGridに表示することができました。

    WindowsフォームとVBの経験はあるのですがなかなか難しく感じます。

    今後ともよろしくお願いいたします。

    2016年12月19日 23:14