2017-09-28 76 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[]。如果不是,那么你应该更新你的问题,以更具体地说明你必须使用哪些数据。