DATAGRIDVIEW CAMPO BOOL PARA IMAGE

 Tópico anterior Próximo tópico Novo tópico

DATAGRIDVIEW CAMPO BOOL PARA IMAGE

C#

 Compartilhe  Compartilhe  Compartilhe
#482168 - 08/06/2018 11:14:17

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia, meus amigos!
Estou preenchendo um DataGridView com DataSource:
dgvCliente.DataSource = db.Cliente.ToList();

e gostaria de ter uma coluna tipo Image para informar os clientes que estão bloqueados ou não.
Na minha classe, tenho um campo:
public bool? Bloqueado { get; set; }

Precisaria fazer com que na hora de mostrar os dados no DataGridView, ao invés de mostrar na coluna "Bloqueado" os valores true ou false, mostrar uma imagem (bolinha-vermelha/bolinha-verde).
Como posso fazer isso?



____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




Resposta escolhida #482169 - 08/06/2018 12:09:31

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
existem duas opções:

1 - vc deve passar uma objeto que não seja de dominio ( um Model view ), vc pode herdar a classe de dominio e adicionar um atributo do tipo object para passar a imagem.

2 - vc pode criar um atributo [NotMapped] do tipo object e passar a imagem pra ele depois que carregar a lista.
db.Cliente.ToList();

faz um foreach e passa a imagem.



#482170 - 08/06/2018 12:12:45

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 08/06/2018 12:23:21 por CLEVERTON

imgImprimir   é um atributo [NotMapped] ou está no .Ignore() se usado via Fluent
Lembrando que o tipo da coluna deve ser DataGridViewImageColumn

EDITADO

            Bitmap seuBitmapVermelho = .......;
            Bitmap seuBitmapVerde = ........;

            suaListaClientes.ForEach(l => l.imgImprimir = l.Cancelado== true ? seuBitmapVermelho : seuBitmapVerde);





#482172 - 08/06/2018 12:18:58

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Tirei o chapéu CLEVERTON!!!!

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#482173 - 08/06/2018 12:22:45

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Citação:
Tirei o chapéu CLEVERTON!!!!


Obrigado, tentando aprender um pouquinho com vc.   



#482199 - 11/06/2018 08:32:07

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Bom dia Cleverton, por favor me diga onde estou errando:

Na minha classe, coloquei o atributo:
[NotMapped]
public Image Status { get; set; }


Ao carregar a List():
Bitmap verde =  new Bitmap(Image.FromFile(Application.StartupPath + "\\images\\bola-verde.jpg"));
Bitmap vermelha = new Bitmap(Image.FromFile(Application.StartupPath + "\\images\\bola-vermelha.jpg"));
dgvCliente.DataSource = db.Cliente.ToList().ForEach(x => x.Status = x.Bloqueado == true ? vermelha : verde);


Não funciona, pois a Error List está: Cannot implicitly convert type 'void' to 'object'

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482204 - 11/06/2018 10:33:45

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Aparentemente nada de errado, mais um detalhe que eu faria, é deixar a armazenada numa variável, e só depois executaria o foreach.

var minhaLista = db.Cliente.ToList();.
minhaLista.ForEach(x => x.Status = x.Bloqueado == true ? vermelha : verde)

BindingSource a = new BindingSource() { DataSource = minhaLista };
dgvCliente.DataSource = a;;



#482206 - 11/06/2018 11:08:53

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Ah, tá, cometi um algum erro (não sei onde), mas agora funcionou:
var lista = db.Cliente.Where(x => x.Deleted == false).OrderBy(x => x.Nome).ToList();
Image vermelha = Image.FromFile(Application.StartupPath + "\\images\\bola-vermelha.jpg");
Image verde = Image.FromFile(Application.StartupPath + "\\images\\bola-verde.jpg");
lista.ForEach(x => x.Status = x.Bloqueado == true ? vermelha : verde);
dgvCliente.DataSource = lista;


Obrigado, amigo.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




#482208 - 11/06/2018 11:17:32

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 11/06/2018 11:19:29 por CLEVERTON

Citação:
Não funciona, pois a Error List está: Cannot implicitly convert type 'void' to 'object'


Aparentemente vc estava passando um VOID para o datasource
Pois o foreach "retorna" VOID.




#482209 - 11/06/2018 11:22:18

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 11/06/2018 11:23:50 por CLEVERTON

Sobre isso

[NotMapped]
public Image Status { get; set; }


Porque vc não coloca o tipo do atributo como object invés de Image ?
public object Status { get; set; }

dessa forma vc deixa sua classe/projeto mais desacoplado de referências.
vai que um dia vc precise reaproveitar isso em outro tipo de aplicação como xamarin ou outras.




#482211 - 11/06/2018 12:39:41

PERCIFILHO
MATAO [SP]
Cadast. em:Dezembro/2009


Valeu Cleverton obrigado pelas dicas.

____________________________________________________
Você sabe que alguém te ama não pelo que ele fala, mas pelo o que faz.
O amor não sobrevive de teorias.




 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por PERCIFILHO em 11/06/2018 18:29:26