2016-04-09 18 views
0

Ich habe eine GUI, die Daten aus einer Datei lädt, um meine DataGridView Daten zu füllen. Ich habe zwei DataGridViews. Eine für Teams und eine für Mitglieder. Wenn ich auf ein anderes Team klicke, werden mir die Mitglieder dieses Teams angezeigt.C# DataGridView Bilder pro Zeile hinzufügen

Ich möchte in der Lage sein, ein Image für das Team hinzuzufügen, also zum Beispiel TeamLogo. Ich habe die Spalte bereits hinzugefügt und eine DataGridViewImageColumn erstellt. Aber wenn ich ein Bild hinzufügen, indem Sie mit:

 Image image = Image.FromFile(@"C:\Users\Matthew\Desktop\Images\ManU.jpeg"); 
     Team_Logo.Image = image; 

fügt es das gleiche Bild für alle Teams ist es eine Möglichkeit, um getrennte Bilder hinzufügen und fügen Sie wahrscheinlich ein Openfiledialog, um das Bild meiner selbst zu suchen.

Ich hätte nichts dagegen, wenn ich es nicht per Spalte machen könnte und ich musste eine PictureBox haben, solange jedes Mal, wenn ich das Team ändere, erscheint das andere Bild.

Antwort

0

Alles, was Sie wirklich tun müssen, ist, jeden Wert für jede Zeile einzeln zu laden.

Hier ein Beispiel:

Zuerst habe ich eine Spalte erstellen, fügen Sie es und ihm einen Namen geben:

DataGridViewImageColumn imgCol = new DataGridViewImageColumn(); 
int icIndex = dataGridView1.Columns.Add(imgCol); 
dataGridView1.Columns[icIndex].Name = "Image"; 

Jetzt stelle ich die Werte für alle Zeilen. Ich benutze eine ImageList, die schön ist, da es schnell sein wird und sicherstellen wird, dass alle Bilder der gleichen Größe erhalten.

Natürlich müssen Sie die richtigen Bilder laden. Vielleicht möchten sie von der imageList1.Images.Keys Sammlung zuzugreifen ..

foreach (DataGridViewRow row in dataGridView1.Rows) 
    if (row.Index < imageList1.Images.Count) // * 
     row.Cells["Image"].Value = imageList1.Images[row.Index]; 

Jetzt jede Zeile ein anderes Bild zeigen.

Je nach Selection so etwas wie dies das Bild in einem PictureBox zeigen:

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    if (dataGridView1.SelectedRows.Count > 0) 
     pictureBox1.Image = imageList1.Images[dataGridView1.SelectedRows[0].Index]; 
} 

Sie können aber die Image im PB größer als in den DGV Zeilen zeigen? entweder Dazu können Sie ein zweites ImageList mit einem größeren ImageSize (bis zu 256x256 nur) oder laden Sie die Bilder von der Festplatte verwenden, mit der Images.Key Eigenschaft ..

aktualisieren

beachten Sie, dass der Code über verwendet eine vereinfachte und ziemlich zerbrechliche Beziehung, um die Bilder mit den Zeilen zu verbinden, wobei sie sich darauf verlassen, dass sie vollständig und in der gleichen Reihenfolge sind.

Dies sollte zum Testen der Benutzeroberfläche funktionieren, aber danach sollten Sie es für etwas robuster austauschen.

Ich habe einen Scheck hinzugefügt (*), aber dies wird nur die IndexOutOfRange Fehler vermeiden, wenn Sie weniger Bilder als Reihen ..

Eine Idee, die Teamnamen beziehen mit den Bildnamen sein könnte. Ich weiß nicht, wie Ihre Benennungsschemata aussehen.

Und wenn Sie möchten, dass das Ganze editierbar ist, müssen Sie darüber nachdenken, wie und wo Sie Ihre Daten speichern.Aber diese Frage geht über den Umfang der ursprünglichen Frage hinaus.

+0

in meinem Form1_Load habe ich den Code, den Sie zur Verfügung gestellt haben erwarten für die Methode, die separat ist. Ich habe ein Bild zur Imagelist hinzugefügt, indem ich imageList1.Images.Add (Image.FromFile (@ "C: \ Benutzer \ Matthew \ Desktop \ Images \ Liverpool.jpg")) verwendet habe; Allerdings bekomme ich den folgenden Fehler: Eine nicht behandelte Ausnahme des Typs 'System.ArgumentOutOfRangeException' in System.Windows.Forms.dll aufgetreten Zusätzliche Informationen: InvalidArgument = Wert von '2' ist nicht gültig für 'Index'. –

+0

Natürlich müssen Sie sicherstellen, dass Sie für jede angezeigte Zeile ein Bild in der Liste haben. Mit nur einem Bild können Sie nur dieses eine Bild in der ersten Reihe zeigen. Die nächste Zeile mit Index = 1 wird die SO-Ausnahme auslösen. Du kannst Prüfungen hinzufügen, um das zu verhindern, aber letztendlich würde ich erwarten, dass du für jedes Team ein Logo zeigst, oder? Wenn du möchtest, dass dein Bild überprüft wird, ob ein passendes Bild gefunden wird und wenn kein Standardbild geladen wird, setze es am besten auf Index 0 .. – TaW

+0

Ich habe 3 Teams, also habe ich 3 Bilder zur Liste hinzugefügt, aber jetzt bekomme ich der gleiche Fehler, aber 'InvalidArgument = Wert von' 3 'ist nicht gültig für' Index '.' ] –

Verwandte Themen