[C#, DataGridView] Erstellen einer Image Spalte

Drucken
( 1 Vote )
Hauptkategorie: Programmieren Kategorie: C#
Erstellt am 26.04.2013 Zuletzt aktualisiert am 28.05.2013 Geschrieben von Jonny132
Das Erstellen einer ImageColumn zur Anzeige eines Bildes für ein DataGridView ist nicht schwer.
Für dieses Beispiel benötigt ihr nur eine Form auf dem sich ein DataGridView befindet.
Im Beispiel wird gezeigt wie ihr abhängig von den Werten der Zeile unterschiedliche Bilder anzeigen lassen könnt.

Form-Load Ereignis:
    private void Form1_Load(object sender, EventArgs e)
    {
      DataTable table = new DataTable();
      table.Columns.Add("Text");
      table.Columns.Add("Random", typeof(bool));
      Random r = new Random((int)DateTime.Now.Ticks);
      for (int i = 0; i < 10; i++)
      {
        DataRow row = table.NewRow();
        row[0] = "Zeile " + i.ToString();
        row[1] = r.Next(0, 2) == 1 ? true : false;
        table.Rows.Add(row);
      }
      DataGridViewImageColumn imgCol = new DataGridViewImageColumn();
      imgCol.ImageLayout = DataGridViewImageCellLayout.Zoom;

      dataGridView1.DataSource = table;
      dataGridView1.Columns.Add(imgCol);
      dataGridView1.CellFormatting += new DataGridViewCellFormattingEventHandler(dataGridView1_CellFormatting);
    }
Zu allererst erstellen wir ein DataTable welches wir mit Dummywerten befüllten und welche wir dann per DataBinding an das DataGridView binden können.
Um zu simulieren können bei verschiedenen Werten, verschiedene Bilder anzuzeigen, wird im Beispiel eine Bool-Spalte angefügt welche hinterher mittels Zufallsgenerator mit true oder false befüllt wird.
Abhängig vom Wert dieser Spalte wird ein anderes Bild im DataGridView angezeigt.

Dann erstellen wir eine Variable vom Typ DataGridViewImageColumn welche unser Bild anzeigen lassen soll.
Damit das Bild immer im richtigen Format, unabhängig von der Zellengröße angezeigt wird, stellen wir das ImageLayout auf Zoom.

Zu letzt wird noch die DataTable an das DataGridView gebunden und die DataGridViewImageColumn zur DataGridView hinzugefügt.   
  
Damit das Bild abhängig vom Zellenwert in das DataGridView gezeichnet wird, abbonieren wir das CellFormatting Ereignis.

CellFormatting - Ereignis:
    void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
      if (e.ColumnIndex == 2)
      {
        DataRow row = ((DataRowView)dataGridView1.Rows[e.RowIndex].DataBoundItem).Row;

        if ((bool)row[1] == true)
        {
          e.Value = Image.FromFile(@"C:\temp\green.png");
        }
        else
        {
          e.Value = Image.FromFile(@"C:\temp\red.png");
        }
      }
    }
Zuerst fragen wir von den EventArgs ab ob der ColumnIndex auf der DataGridViewImageColumn entspricht.
Dann wird die aktuell zu Formatierende Zeile in ein DataRow-Objekt gecastet, damit wir auf dessen Werte zugreiffen können.

Befindet sich nun in der Zeile der Wert true so setzen wir den Value der Zelle auf ein anderes Bild als wie wenn der Wert false wäre.

DataGridViewImageColumn Beispiel   

Das folgende Tutorial könnte ebenfalls interessant für Sie sein:
[C#, DataGridView] Erstellen einer Button Spalte


    Veröffentlichen Sie ihre Kommentare ...