我想用三层体系结构在C#中编写一本电话簿,但是我没有足够的架构。当我们单击每个行时,我们有一个datagridView在图片框中显示每个人的图像。但是它行不通。我不知道问题在哪里。请引导我。我最近熟悉了这个架构。
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);
}
我得到错误:
"参数1:不能从'void'转换为对象"。
我知道我写了一个错误,请指导我。
您似乎对函数的返回值缺乏理解。
首先,您的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[]
。如果不是,那么您应该更新您的问题,以更具体地了解您必须使用的数据。