2011-08-17 63 views
0

我有兩種形式:一種是equipmentfinder,另一種是productdescription。我有一個datagridview列productnameproductimageequipmentfinder形式。錯誤:無法將類型System.type轉換爲system.drawing.Image

當我點擊其中一列(即)productimage列時,它會轉到另一個工作正常的頁面。

我正在製作WinForms應用程序。

但我想顯示在productimage列中從datagridview在另一個picturebox在equipmentfinder窗體中的產品圖像。

所以對於我做這樣的:

private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == productgridview.Columns["productimage"].Index) 
    { 
     ProductDescriptionForm pf = new ProductDescriptionForm(); 
     pf.ShowDialog(this); 
    } 
} 

productdescription形式我做這樣的:

private void ProductDescriptionForm_Load(object sender, EventArgs e) 
{ 
    EquipmentFinder eqipu = new EquipmentFinder(); 
    this.imagepicture.Image = (Image)eqipu.productgridview.SelectedCells.GetType(); 
} 

,但我在這行得到了一個錯誤:

this.imagepicture.Image =(Image)eqipu.productgridview.SelectedCells.GetType(); 

Error: cannot convert type system.type To system.drawing.image

+3

GetType爲您提供單元格的類型,而不是單元格的內容作爲類型。您可能想嘗試放棄GetType()位,並將SelectedCell投射到圖像(或單元內的項目) – tonycoupland

+0

如何做到這一點,你會幫助... –

+0

@tony你會幫助這個.. –

回答

0

什麼喲你是嘗試來檢索這裏是存儲在datagridview單元格中的對象的類型,這確實是一個「System.Type」對象,而不是「System.Drawing.Image」,鑄造它在這裏沒有用處。您需要獲取單元格的內容,而不是內容的類型。

這段代碼還有其他錯誤!

  • SelectedCells是一個單元的集合。所以你沒有得到單元格內容的類型,而是集合的類型(即DataGridViewSelectedCellCollection)。如果您確定至少選擇了一個單元格,則應使用SelectedCells[0]

  • 您想要檢索單元格的內容,而不是其類型。使用Value而不是GetType()

  • 我不明白你爲什麼要實例化一個新的EquipmentFinder。這將創建一個空的,從來沒有顯示形式......我建議什麼:創建一個屬性來保存圖像中ProductDescriptionForm

    public Image Picture 
    { 
        get { return imagepicture.Image; } 
        set { imagepicture.Image = value; } 
    } 
    

然後顯示產品說明表格前,設置該屬性

private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == productgridview.Columns["productimage"].Index) 
     { 
      ProductDescriptionForm pf = new ProductDescriptionForm(); 
      pf.Picture = (Image)productgridview.SelectedCells[0].Value; 
      pf.ShowDialog(this); 
     } 
    } 

並刪除您在ProductDescriptionForm_Load中編寫的代碼。 PS:雖然我希望這段代碼有效,但它仍然缺少邊界和類型檢查。我會建議寫這樣的事情:

private void productGridview_Cellclick(object sender, DataGridViewCellEventArgs e) 
    { 
     // Don't handle clicks on the column header. 
     if (e.RowIndex == -1) return; 

     // Bad index 
     if (e.ColumnIndex != productgridview.Columns["productimage"].Index) return; 

     // No selection 
     if (productgridview.SelectedCells.Count == 0) return; 

     // Make sure we have an image in this cell. 
     object selectedValue = productgridview.SelectedCells[0].Value; 
     if (selectedValue is Image) 
     { 
      // Forms are IDisposable, so use them embedded in a using statement. 
      using (ProductDescriptionForm pf = new ProductDescriptionForm()) 
      { 
       pf.Picture = (Image)selectedValue; 
       pf.ShowDialog(this); 
      } 
     } 
    } 

希望這會有所幫助。

+0

hey Odalet我在這一行發生錯誤pf.picture =(Image)productgridview.SelectedCells [0] .Value;像這樣無法投射'System.Int32'類型的對象來鍵入'System.Drawing.Image'。 –

+0

這意味着所選單元格不包含圖像,而是一個整數。你在哪裏點擊?在包含圖像的單元格上? – odalet

+0

我點擊了圖片單元格... –

1

一些事情。首先,使用GetType()獲取對象類型,而不是對象本身,因此您需要刪除GetType()。其次,它看起來像SelectedCells是一個集合,所以你需要指定單元格索引。

//replace zero index with index of the cell that contains the image 
this.imagepicture.Image = (Image)eqipu.productgridview.SelectedCells[0]; 
相關問題