Beispiel-Tabelle für das DataGridView
Frank Dzaebel, erstellt am: 26.3.2006, zuletzt geändert:  11.11.2006
Kategorie: DataGridView.NET-Version: 2.0

Kleines Beispiel des Füllens eines DataGridViews durch Erstellung eines eigenen DataTables. Bool-Typen werden automatisch durch Checkboxen dargestellt. Das DefaultCellStyle.Format "dd.MMMM yyyy" formatiert die Datums-Spalte wie gewünscht.
Ein weiteres Beispiel eines ungebundenen DataGridViews wird hier dargestellt. Es zeigt die ToString()-Überschreibung einer Klasse, die somit in der DataGridView-Zelle angezeigt wird. Weiterhin wird deutlich, wie man über Casting auf Member des dahinterliegenden Typs zugreifen kann.

Inhalt:
   Gebundenes Szenario
   Gebundenes Szenario2 mit Attributen 
   Ungebunden mit Klassen-Instanzen



Gebundenes Szenario
using System;
using System.Windows.Forms;
using System.Data;
using System.Drawing;

namespace DataGridViewValidate
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
      this.Load += new EventHandler(Form1_Load); 
    }

    private void Form1_Load(object sender,EventArgs e)
    {
      DataGridView dataGridView1 = new DataGridView();
      DataTable dt = new DataTable ("Daten");
      dt.Columns.Add(new DataColumn("Name"));
      dt.Columns.Add(new DataColumn("Reich", typeof(bool)));
      dt.Columns.Add(new DataColumn("Neffen", typeof(int)));
      dt.Columns.Add(new DataColumn("Geburtsdatum", typeof(DateTime)));
      AddNewRow(dt,"Dagobert Duck",true ,1,new DateTime(1962,10,11));
      AddNewRow(dt,"Donald Duck"  ,false,3,new DateTime(1973, 8,12));
      AddNewRow(dt,"Gustav Gans"  ,false,0,new DateTime(1973, 6,13));
      AddNewRow(dt,"Trick Duck"   ,false,0,new DateTime(1985, 4,14));
      dataGridView1.DataSource = dt; 
      dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
      dataGridView1.Location = new Point(15,15); this.Controls.Add(dataGridView1);
      BreiteAnSpaltenAnpassen(dataGridView1);
      dataGridView1.Columns[3].DefaultCellStyle.Format = "dd.MMMM yyyy";
    }

    private void AddNewRow(DataTable dt,string name,bool reich,int neffen,DateTime geburtsDatum)
    {
      DataRow dr = dt.NewRow();
      dr[0] = name; dr[1] = reich; dr[2] = neffen; dr[3] = geburtsDatum;
      dt.Rows.Add(dr);
    }

    private void BreiteAnSpaltenAnpassen(DataGridView dgv)
    {
      int wdth = dgv.RowHeadersWidth + (int)(dgv.Columns.Count * 2);
      for (int c=0; c<dgv.Columns.Count; c++) 
        wdth += dgv.Columns[c].Width;
      dgv.Width = wdth;
    }
  }
}
Gebundenes Szenario 2, mit Klassen-Instanzen und Attributen

using System;
using System.Windows.Forms;
using System.Data;
using System.Collections.Generic;
using System.ComponentModel;

namespace WindowsApplication102
{
  public partial class Form1 : Form
  {
    public Form1() { InitializeComponent(); } // Fügen Sie ein DataGridView zur Form hinzu

    private void Form1_Load(object sender,EventArgs e)
    {
      Person[] personen = new Person[]{new Person("Frank",42),        
        new Person("Eva",34), new Person("Luca",2)};

      //Bei generischer Semantik die oberen Zeilen auskommentieren etc.
      //List<Person> personen = new List<Person>(new Person[]{new Person("Frank",42), 
      //   new Person("Eva",34), new Person("Luca",2)});       

      dataGridView1.DataSource = personen; this.Width = 300;
    }

    public class Person
    {
      private string name;
      private int alter;
      private DateTime geburtstag;

      public override string ToString()
      {
        return (name);
      }

      public Person(string name,int alter)
        : this(name,alter,DateTime.Now.AddYears(-alter)) { }
      public Person(string name,int alter,DateTime geburtstag)
      {
        this.Name = name;
        this.Alter = alter;
        this.geburtstag = geburtstag;
      }

      [DisplayName("MeinName")] // im DataGridView wird "MeinName" dargestellt             
      public string Name
      {
        get { return name; }
        set { name = value; }
      }

      [Browsable(false)] // Eigenschaft wird im DataGridView nicht angezeigt
      public int Alter
      {
        get { return alter; }
        set { alter = value; }
      }

      public DateTime Geburtstag
      {
        get { return geburtstag; }
        set { geburtstag = value; }
      }
    }
  }
}

Ungebunden mit Klassen-Instanzen
(fügen Sie ein DataGridView und einen Button hinzu)

using
System; using System.Windows.Forms; using System.Data; using System.Drawing; namespace DataGvUngeb { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender,EventArgs e) { dataGridView1.Columns.Add("Person","Person"); dataGridView1.Rows.Add(new Person("Frank",42)); dataGridView1.Rows.Add(new Person("Eva",34)); dataGridView1.Rows.Add(new Person("Luca",2)); } public class Person { private string name; private int alter; private DateTime geburtstag; public override string ToString() { return (name); } public Person(string name,int alter) : this(name,alter,DateTime.Now.AddYears(-alter)) { } public Person(string name,int alter,DateTime geburtstag) { this.Name = name; this.Alter = alter; this.geburtstag = geburtstag; } public string Name { get { return name; } set { name = value; } } public int Alter { get { return alter; } set { alter = value; } } public DateTime Geburtstag { get { return geburtstag; } set { geburtstag = value; } } } private void button1_Click(object sender,EventArgs e) { MessageBox.Show(((Person)dataGridView1[0,1].Value).Geburtstag.ToShortDateString()); } } }