Ein Leser von meinem Buch LINQ hat mir die Frage gestellt, wie er mit LINQ to Objects erstellte Objekte (Objects) in einem DataGridView Control auflisten kann.
Beispiel (Sample) 1
Im Beispiel-Code haben wir die Klasse (Class) Person zwei Public Felder (Fields) mit dem Namen Age und Name.
public class Person
{
public int Age;
public string Name;
}
Als nächstes erstellen wir unsere Daten wie folgt:
List<Person> firends = new List<Person>();
Person friend1 = new Person();
friend1.Name = "Hans";
friend1.Age = 38;
firends.Add(friend1);
Person friend2 = new Person();
friend2.Name = "Karin";
friend2.Age = 26;
firends.Add(friend2);
Bevor wird die Daten (friends) an die DataSource-Eigenschaft (Property) des DataGridView-Controls zuweisen, ist es wichtig, dass die gewünschten Felder mit Hilfe einer Abfrage bestimmt werden.
var friend = from f in friends
select new { f.Age, f.Name };
Durch die Verwendung der ToList() Methode werden unsere Daten DataGridView-Control tauglich.
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.DataSource = friend.ToList();
Nach der Zuweisung werden die Daten automatisch im Control aufgelistet.
Den kompletten Source-Code findet Ihr wie folgt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace LinqToObjectsDataGridView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnShowData_Click(object sender, EventArgs e)
{
List<Person> friends = new List<Person>();
Person friend1 = new Person();
friend1.Name = "Hans";
friend1.Age = 38;
friends.Add(friend1);
Person friend2 = new Person();
friend2.Name = "Karin";
friend2.Age = 26;
friends.Add(friend2);
var qry = from f in friends
select new { f.Age, f.Name };
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.DataSource = qry.ToList();
}
}
public class Person
{
public int Age;
public string Name;
}
}
Beispiel (Sample) 2
Wenn Sie die Getter-und-Setter in Ihrer Klasse verwenden, dann müssen Sie die Namen der Felder nicht explizit definieren.
public class PersonExtended
{
private int _Age;
public int Age
{
get { return _Age; }
set { _Age = value; }
}
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
Die Abfrage sieht in diesem Beispiel wie folgt aus:
IEnumerable<PersonExtended> qry = from f in friends
select f;
Und anschließend die Zuweisung an die DataSource-Eigenschaft:
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.DataSource = qry.ToList();
Als Resultat erhalten wir die gleichen Einträge:
Source-Code sieht wie folgt aus:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace LinqToObjectsDataGridView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnShowData_Click(object sender, EventArgs e)
{
List<PersonExtended> friends = new List<PersonExtended>();
PersonExtended friend1 = new PersonExtended();
friend1.Name = "Hans";
friend1.Age = 38;
friends.Add(friend1);
PersonExtended friend2 = new PersonExtended();
friend2.Name = "Karin";
friend2.Age = 26;
friends.Add(friend2);
IEnumerable<PersonExtended> qry = from f in friends
select f;
this.dataGridView1.AutoGenerateColumns = true;
this.dataGridView1.DataSource = qry.ToList();
}
}
public class PersonExtended
{
private int _Age;
public int Age
{
get { return _Age; }
set { _Age = value; }
}
private string _Name;
public string Name
{
get { return _Name; }
set { _Name = value; }
}
}
}
Das komplette ZIP-File mit Source findet Ihr unter: LinqToObjectsDataGridView
Viel Spaß...
No comments:
Post a Comment