[C#] Bild in einzelner Zelle

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von SurTana, 3. September 2010 .

Schlagworte:
  1. 3. September 2010
    Bild in einzelner Zelle

    Hi Leute,
    ich brauche mal hilfe bei einem kleinen Problem.
    Also ich habe ein DataGridView das fülle ich mit Daten aus einer SQL Tabelle über den SQLDataReader.
    Mit einer Switch Case anweisung frage ich dann immer den Inhalt ab und setze das Feld mittels
    dataGridView1[j, i].Style.BackColor = Color.Blue oder Color.Red auf Blau oder Rot wenn der Wert 0,1 ist.
    Die Hintergrundfarbe war aber nur eine übergangslösung weil ich erstmal wissen wollte ob ich das Datagrid gefüllt bekomme und wie es sich verändern lässt.
    Ich möchte nun aber statt der Hintergrundfarbe Bilder in den Zellen haben.
    Ich habe in meinem Projektverzeichnis also ein rot.bmp und ein blau.bmp
    wie bekomme ich diese Bilder in die Zellen? und wie kann ich diese Bilder überhaupt einbinden? bisher liegen sie ja nur im Verzeichnis..
    Ausserdem möchte ich dass in der Funktion dataGridView1_CellClick() dann bei einem Click auf die blaue zelle der wert zur roten geändert wird, aber ich denke mal das geht dann analog wie oben.

    Also ich hoffe ihr könnt mir helfen, ich habe gestern den ganzen Tag nach einer Lösung gesucht und weder was ich in Büchern gefunden habe, noch im Internet konnte mir helfen, bzw. vermutlich hab ich es auch einfach nicht richtig verstanden.

    Gruß
    SurTana
     
  2. 3. September 2010
    AW: Bild in einzelner Zelle

    Als erstes solltest du beide Bilder (bzw alle, die du benutzen willst) als Ressource zu deinem Projekt hinzufügen. Danach kannst du wie hier vorgehen:
    Gewusst wie: Anzeigen von Bildern in Zellen des DataGridView-Steuerelements in Windows Forms

    Eine richtig gute Anleitung habe ich auch hier gefunden. Da wurde eine eigene Cell Klasse geschrieben, die dir die Arbeit erleichtern sollte:
    Defining Custom Column and Cell Types | Presenting Data with the DataGridView Control in .NET 2.0 | InformIT

    greez
     
  3. 3. September 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Bild in einzelner Zelle

    Also es geht bei mir eigentlich um eine Platzverwaltung und beim clicken sollen die Bilder geändert werden, eben von rot zu blau oder andersrum. Aus einer db lese ich den Status aller Plätze ein.
    Was ich nicht verstehe ist folgendes:
    So (s.u.) baue ich meine Tabelle auf, ich will dann keine zusätzliche Image Spalte mehr haben.

    Code:
     dataGridView1.ColumnCount = NumRowSeats.Max();
     dataGridView1.RowCount = Rows;
     dataGridView1.Visible = true;
     if (dataGridView1.RowCount > 1 & dataGridView1.ColumnCount > 1)
     {
    
     int[,] Seat = new int[Rows, NumRowSeats.Max()];
     int Stat = 0;
     int k = 0;
     int l=0;
     for (int i = 0; i < Rows; i++)
     {
     for (int j = 0; j < NumRowSeats.Max()+1; j++)
     {
     //createGraphicsColumn();
     k = i + 1;
     l = j + 1;
     SQLString="Select Status...;
    
     Command = new SqlCommand(SQLString, connect);
     //Console.WriteLine(SQLString);
     data = Command.ExecuteReader();
     
     while (data.Read())
     {
     Stat = data.GetInt32(0);
     //Console.WriteLine("Reihe: "+i+"; Platz: "+j);
     //Console.WriteLine("Status: " + Stat);
     dataGridView1[j, i].Value = Stat;
     switch (Stat)
     {
     case 0:
     dataGridView1[j, i].Style.BackColor = Color.White;
     break;
     case 1:
     break;
     case 2:
     dataGridView1[j, i].Style.BackColor = Color.Blue;
     break;
     case 3:
     break;
     case 4:
     break;
     case 5:
     break;
     case 6:
     break;
     case 7:
     dataGridView1[j, i].Style.BackColor = Color.Red;
     break;
     }
     }
     data.Close();
     }
     }
    
    zunächst hatte ich auch erstmal oben den teil gelassen und dann versucht nur beim click ein bild einzufügen.

    Code:
    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
     {
     
     DataGridViewImageColumn dgvic = new DataGridViewImageColumn();
     DataGridViewColumn dgvc = new DataGridViewTextBoxColumn();
    
     dgvic.ImageLayout = DataGridViewImageCellLayout.Normal;
    
     dataGridView1.Columns.Add(dgvc);
     dataGridView1.Columns.Add(dgvic);
     dataGridView1.CurrentCell.Value = redChair; 
     }
    
    sieht aber dann folgendermaßen aus:

    vorher

    Bild

    nachher

    Bild
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.