在picturebox中查看3层架构中的联系人照片C#
问题描述:
我想用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".
我知道我写了一个错误,请指导我。
答
您似乎对从函数返回的值缺乏理解。
首先,你的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);
}
注意,这一切都取决于一个事实,即PersonImage
是byte[]
。如果不是,那么你应该更新你的问题,以更具体地说明你必须使用哪些数据。
什么不行? – musefan
我收到错误“参数1:无法从'无效'转换为对象”。 –
BLL的GrtBinaryImage方法没有返回任何值我想它应该返回一个在bytearytoimage中需要的对象 请更新BLL方法 –