2017-09-28 9 views
0

Je souhaite écrire un répertoire en C# avec une architecture à trois couches, mais je n'en ai pas assez de cette architecture. Nous avons un DataGridView qui affiche l'image de chaque personne dans la zone d'image lorsque nous cliquons sur chacune des lignes. Mais ça ne marche pas. Je ne sais pas où est le problème. Guidez-moi s'il-vous-plaît. J'ai récemment pris connaissance de cette architecture.Affichage d'une photo de contact dans une architecture à 3 couches dans une zone d'image C#

Code DAL:

public void GetBinaryImage(int Id) 
    { 

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

    } 

Code BLL

public void GrtBinaryImage(int person_Id) 
    { 

     Myperson.GetBinaryImage(person_Id); 

    } 

code 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); 
    } 

je reçois l'erreur:

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

Je sais que j'ai écrit une erreur, s'il vous plaît me guider.

+0

Qu'est-ce qui ne fonctionne pas? – musefan

+0

Je reçois l'erreur "Argument 1: impossible de convertir" void "en objet". –

+0

votre méthode GrtBinaryImage de BLL ne renvoie aucune valeur je suppose qu'elle doit retourner un objet qui est requis dans bytearytoimage s'il vous plaît mettre à jour votre méthode BLL –

Répondre

-1

Vous semblez avoir un manque de compréhension avec les valeurs retournées par les fonctions.

Tout d'abord, votre fonction DLL ne retourne rien, je ne peux que supposer que vous essayez de retourner PersonImage qui est, espérons-le, un byte[]. De plus, vous devez modifier le code pour ne sélectionner que la valeur que vous souhaitez revenir:

DLL

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

Ensuite, vous avez le même problème avec les valeurs de retour dans votre BLL:

BLL

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

Cela devrait être suffisant pour obtenir ce que vous voulez, bien que je recommande également de changer le type de paramètre dans votre fonction bytearytoimage spécifiquement byte[]:

PL

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

Notez que tout cela repose sur le fait que PersonImage est un byte[]. Si ce n'est pas le cas, vous devez mettre à jour votre question pour être plus précis sur les données avec lesquelles vous devez travailler.