在图片框C#中的三层体系结构中查看联系人照片



我想用三层体系结构在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);
}

请注意,这一切都取决于PersonImagebyte[]。如果不是,那么您应该更新您的问题,以更具体地了解您必须使用的数据。

最新更新