LINQ to Objectsの結果をDataGridViewに表示

blog20110912-LinqToObj

LINQ to ObjectsLink でクエリから得た結果をお手軽にDataGridViewに表示する方法(Visual Studio 2010)。ポイントは、

  • 検索対象となるクラスが保持する値のうち、DataGridViewで表示したいものをプロパティとして宣言する。{get; }を付けないとDataGridViewには表示されない。読み取り専用にしたい場合は{get; private set;}にする。({get;}だけだと初期化不能になる)
  • クエリで得られた IEnumerable<T>をToList()で変換して、DataGridView.DataSourceにセットする

列名もプロパティ名が自動的に反映されます。デバッグ目的にはとっても便利。

今まで仕事上Visual Studio 2005を使っていたので、2008から加わったLINQは最近知りました。こんな便利なものができていたとは…Microsoftやりたい放題だな。

[参考]Linq to object with DataGridView (C# Corner)Link

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace LINQ2Objects
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            List<TouristResort> TouristResorts = new List<TouristResort>();
            TouristResorts.Add(new TouristResort("Fuji", 120.7, LINQ2Objects.Location.Mountain));
            TouristResorts.Add(new TouristResort("Enoshima", 60.1, LINQ2Objects.Location.Ocean));
            TouristResorts.Add(new TouristResort("Atami", 95.1, LINQ2Objects.Location.Spring));
            TouristResorts.Add(new TouristResort("Aso", 599.3, LINQ2Objects.Location.Mountain));
            TouristResorts.Add(new TouristResort("Nichinan", 620.4, LINQ2Objects.Location.Ocean));
            TouristResorts.Add(new TouristResort("Beppu", 598.7, LINQ2Objects.Location.Spring));

            IEnumerable<TouristResort> subTouristResorts =
                from TouristResort aTouristResort in TouristResorts
                where aTouristResort.Distance<600
                orderby aTouristResort.Distance descending
                select aTouristResort;

            dataGridView1.DataSource = subTouristResorts.ToList<TouristResort>();
        }
    }

    enum Location
    {
        Mountain,
        Ocean,
        Spring
    }

    class TouristResort
    {
        public string Name { get; private set; }
        public double Distance { get; private set; }
        public Location Loc { get; private set; }

        public TouristResort() { }
        public TouristResort(string name, double distance, Location loc)
        {
            Name = name;
            Distance = distance;
            Loc = loc;
        }
    }
}

— posted by mu at 09:32 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0091 sec.
prev
2011.9
next
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30