LINQ to Objects でクエリから得た結果をお手軽に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