2016-04-09 44 views
0

我有一個GUI從文件加載數據,以填充我的DataGridView將數據。我有兩個DataGridViews。一個是團隊和一個是會員。當我點擊不同的團隊時,會顯示與該團隊相關的成員。c#DataGridView每行添加圖像

我想成爲一個能夠爲Team Team添加圖片的團隊,例如TeamLogo。我已經添加了列,並將其設置爲DataGridViewImageColumn。但是,當我使用添加圖像:

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

它增加了對所有球隊相同的圖像是存在爲了增加單獨的圖像,更可能以定位圖像我自己加的OpenFileDialog的方式。

我不介意如果我不能按列操作,只要有圖片框,每次我改變團隊的不同圖像出現。

回答

0

您真正需要做的就是爲每一行分別加載每個值。

下面是一個例子:

首先創建一個列,添加它,並給它一個名稱:

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

現在我對所有行設置的值。我使用了ImageList,這很好,因爲它速度很快,並且會確保獲得相同尺寸的所有圖像。

當然,您將需要加載正確的圖像。您可能想要通過imageList1.Images.Keys集合訪問它們。

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

現在每行都會顯示不同的圖像。

根據您的SelectionMode這樣的事情會顯示在PictureBox的圖片:

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

但是你可能想顯示比DGV行較大的PBImage?爲此,你可以使用一個第二ImageList具有較大ImageSize(高達256×256只),或從磁盤加載圖像,使用Images.Key屬性..

更新

注意,上面的碼使用簡單而相當脆弱的關係將圖像與行相結合,依靠它們都是完整的並且以相同的順序。

這應該用於測試用戶界面,但在此之後,您應該更換它以獲得更強大的功能。

我添加了一個檢查(*),但是這隻會阻止IndexOutOfRange錯誤時,你有比行更少的圖像..

一個想法可能是涉及與圖像名稱的球隊的名字。不知道您的命名方案我無法提供代碼..

如果您希望整體可編輯,您需要考慮如何以及在何處存儲數據。但這些問題超出了原來的問題範圍。

+0

在我的Form1_Load我已經把你提供的代碼的方法是單獨的代碼。我已經使用imageList1.Images.Add(Image.FromFile(@「C:\ Users \ Matthew \ Desktop \ Images \ Liverpool.jpg」))將圖像添加到圖像列表中。但是我得到以下錯誤:System.Windows.Forms.dll中發生類型'System.ArgumentOutOfRangeException'的未處理的異常 其他信息:InvalidArgument ='2'的值對'索引'無效。 –

+0

當然,您需要確保您顯示的每一行都有一個圖像。只有一張圖片,您只能在第一行顯示這一張圖片。下一行,索引= 1將拋出SO異常。您可以添加支票來防止這種情況發生,但最終我希望您爲每支球隊顯示一個徽標,對吧?如果你想你的支票可以測試,看看是否找到合適的圖像,如果沒有加載默認圖像,最好放在索引0 .. – TaW

+0

我有3支隊伍,所以我已經添加3個圖像的名單,但現在我越來越相同的錯誤,但'InvalidArgument ='3'的值不適用於'索引'。' ] –