LINQ to Objects でクエリから得た結果をお手軽にDataGridViewに表示する方法(Visual Studio 2010)。ポイントは、
 でクエリから得た結果をお手軽に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) 
 
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;
        }
    }
}
 
  
Comments