2017-09-28 77 views
0

我想用C#編寫一個三層架構的電話簿,但是我沒有足夠的這種架構。 我們有一個datagridview,當我們點擊每一行時,顯示每個人在圖片框中的圖像。 但它不起作用。我不知道問題出在哪裏。請指導我。我最近熟悉了這個架構。在picturebox中查看3層架構中的聯繫人照片C#

DAL代碼:

public void GetBinaryImage(int Id) 
    { 

     context.People.Select(a => new { a.Id, a.PersonImage }).Where(a => a.Id == Id) ; 

    } 

BLL代碼

public void GrtBinaryImage(int person_Id) 
    { 

     Myperson.GetBinaryImage(person_Id); 

    } 

PL代碼

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     if (dataGridView.SelectedRows.Count > 0) 
     { 
      int Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); 
      showpictureBox.Image = bytearytoimage(person.GrtBinaryImage(Id)); 


     } 
    } 

    private Image bytearytoimage(object v) 
    { 
     MemoryStream stream = new MemoryStream(v); 
     return Image.FromStream(stream); 
    } 

我得到的錯誤:

"Argument 1: cannot convert from 'void' to object".

我知道我寫了一個錯誤,請指導我。

+0

什麼不行? – musefan

+0

我收到錯誤「參數1:無法從'無效'轉換爲對象」。 –

+0

BLL的GrtBinaryImage方法沒有返回任何值我想它應該返回一個在bytearytoimage中需要的對象 請更新BLL方法 –

回答

-1

您似乎對從函數返回的值缺乏理解。

首先,你的DLL函數不會返回任何東西,我只能假設你試圖返回PersonImage,這有希望是byte[]。此外,您需要更改代碼,只選擇要返回的值:

DLL

public byte[] GetBinaryImage(int Id) 
{ 
    byte[] result = context.People.Where(a => a.Id == Id).Select(a => a.PersonImage).SingleOrDefault(); 
    return result; 
} 

接下來,你有返回值同樣的問題,在您的BLL:

BLL

public byte[] GrtBinaryImage(int person_Id) 
{ 
    return Myperson.GetBinaryImage(person_Id); 
} 

這應該是足以讓你想要的東西,雖然我也建議你bytearytoimage函數變化的參數類型專門byte[]

PL

private Image bytearytoimage(byte[] v) 
{ 
    MemoryStream stream = new MemoryStream(v); 
    return Image.FromStream(stream); 
} 

注意,這一切都取決於一個事實,即PersonImagebyte[]。如果不是,那麼你應該更新你的問題,以更具體地說明你必須使用哪些數據。