none
Carregar foto do Datagridview e passar para picturebox - Windows Forms C# RRS feed

  • Discussão Geral

  • Fala Galera Boa Tarde! Tô com uma pequena dificuldade em passar minha foto cadastrada para meu PictureBox para fazer o update do registro.

    Meu cenário é o seguinte:

    • Tenho um Form de cadastro que faz a inserção dos dados e
    • Um Form que faz a pesquisa do cadastro que é apresentado em um DataGridView;

    Pois bem eu faço a inserção dos dados e da foto convertida para binário, utilizando o db sqlservermais to com dificuldade em passar a foto para minha picture, os demais campos eu consigo trazer, mas a foto não.

    Obs: é minha primeira vez que to trabalhando com foto no WPF.

    segue meu código galera.

    <-- Esse é do meu DataGridView onde seleciono a célula jogando os dados para o form de cadastro-->

    private void dgw_Onibus_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                try
                {
                    if (lblOperacao.Text == "Aluno Master")
                    {
                        
                        DataGridViewRow dr = dgw_Onibus.SelectedRows[0];
                        this.Hide();
                        FRM_CadOnibusCircular frm = new FRM_CadOnibusCircular();
                        frm.Show();
    
                        frm.TB_id.Text = dr.Cells[0].Value.ToString();
                        frm.TB_IdFicha.Text = dr.Cells[1].Value.ToString();
                        frm.TB_NomeUser.Text = dr.Cells[2].Value.ToString();
                        frm.MK_TelUser.Text = dr.Cells[3].Value.ToString();
                        frm.TB_RgUser.Text = dr.Cells[4].Value.ToString();
                        frm.MTK_CpfUser.Text = dr.Cells[5].Value.ToString();
    
                        frm.picFoto.Image = null;
    
                        if (ds.Tables[0].Rows[linhaNumero][6] != System.DBNull.Value)
                        {
                            foto_array = (byte[])ds.Tables[0].Rows[linhaNumero][6];
                            MemoryStream ms = new MemoryStream(foto_array);
                            frm.picFoto.Image = Image.FromStream(ms);
                        }
    
                        frm.TB_NomeProprietario.Text = dr.Cells[7].Value.ToString();
                        frm.MK_TelProprietario.Text = dr.Cells[8].Value.ToString();
                        frm.TB_EnderecoProprietario.Text = dr.Cells[9].Value.ToString();
                        frm.TB_QdProprietario.Text = dr.Cells[10].Value.ToString();
                        frm.TB_EmailProprietario.Text = dr.Cells[11].Value.ToString();
                        frm.TB_RgProprietario.Text = dr.Cells[12].Value.ToString();
                        frm.MKT_Proprietario.Text = dr.Cells[13].Value.ToString();
                        frm.TB_NumeroProprietario.Text = dr.Cells[14].Value.ToString();
                        frm.TB_LoteProprietario.Text = dr.Cells[15].Value.ToString();
    
                        bool proprietarioChecked = dgw_Onibus.CurrentRow.Cells["opcao"].Value.ToString().Contains("Proprietario");
                        bool depedenteChecked = dgw_Onibus.CurrentRow.Cells["Opcao"].Value.ToString().Contains("Depedente");
                        bool colaboradorChecked = dgw_Onibus.CurrentRow.Cells["opcao"].Value.ToString().Contains("Colaborador"); // Ou contém "Yoga", não sei como você guarda isto na sua `DataGridView`
    
                        // Obter checkBoxlist da seleção
    
                        int indexCbProprietario = GetItemIndex(frm.CLB_Opcao, "Proprietario");
                        int indexCbDepedente = GetItemIndex(frm.CLB_Opcao, "Depedente");
                        int indexCbColaborador = GetItemIndex(frm.CLB_Opcao, "Colaborador"); // fmr.chekedListBox é o nome do seu CheckedListBox dentro do seu form. 
    
                        //Pegar o valor da dataGridView que diz se a determinada atividade está marcada
    
    
    
    
    
                        // Checar o valor da Opcao no seu `checkedListBox`
                        frm.CLB_Opcao.SetItemChecked(indexCbProprietario, proprietarioChecked);
                        frm.CLB_Opcao.SetItemChecked(indexCbDepedente, depedenteChecked);
                        frm.CLB_Opcao.SetItemChecked(indexCbColaborador, colaboradorChecked);
    
    
    
                        frm.BT_UpdateOnibus.Enabled = true;
                        frm.BT_DeleteOnibus.Enabled = true;
                        frm.BT_SaveOnibus.Enabled = false;
                        frm.Lbl_Usuario.Text = lblUsuario.Text;
                        lblOperacao.Text = "";
                    }
                }
                catch (Exception erro)
                {
                    MessageBox.Show(erro.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

     int linhaNumero = 0;
            byte[] foto_array;

    Galera desde de já agradeço pela ajuda!

    quarta-feira, 8 de agosto de 2018 18:58

Todas as Respostas

  • Amigo...

    No form que vai receber o a imagem, você cria uma variável private byte[] foto_array e coloca ela no método público do form ex:

    public seu_form(byte[] foto_array){

        this.foto_array = foto_array;

    }

    Depois você converte ela para o picturebox com MemoryStream

    terça-feira, 14 de agosto de 2018 17:00
  • Galera consegui resolver esse problema eu estava esquecendo de chamar o método na minha classe global do meu dataset.

    o que eu fiz foi isso 

    na minha classe global onde eu chamo todos os meus métodos eu criei 

      public DataSet ds;

    e depois eu chamei ele no meu form de pesquisa para jogar os dados no form principal de cadastro.

    cg.ds = new DataSet();

    após isso só alterei minha linha 

    if (ds.Tables[0].Rows[linhaNumero][6] != System.DBNull.Value) para

    if (cg.ds.Tables[0].Rows[linhaNumero][6] != System.DBNull.Value){

    foto_array = (byte[])cg.ds.Tables[0].Rows[linhaNumero][6];

    }

    Obrigado galera !

    quarta-feira, 15 de agosto de 2018 10:51
  • Galera to com outro problema rsrs 

    consegui carregar a foto, porém quando clico em outro registro para carregar outra foto ele  esta carregando a mesma foto do primeiro registro!

    Alguém saberia me dizer o que eu fiz de errado?

    desde de ja agradeço.

    quarta-feira, 15 de agosto de 2018 12:12
  • Galera consegui resolver novamente o problema que estava citando a cima! irei deixar aqui caso alguém precise valeu!

    foto_array = (byte[])dr.Cells[6].Value;

    essa foi a mudança para que cada célula do datagridview pegasse a foto e jogasse no form principal de cada usuário selecionado.

    quarta-feira, 15 de agosto de 2018 17:02
  • Nao e boa pratica passar a picture no datagridview. Voce deveria usar picturebox seria a melhor forma de programar.

    A flower cannot blossom without sunshine, and man cannot live without love.

    segunda-feira, 20 de agosto de 2018 19:49
    Moderador
  • usa  PictureBox1.DataBindings.Add("Image", abindingsource, "pic", True)


    A flower cannot blossom without sunshine, and man cannot live without love.

    segunda-feira, 20 de agosto de 2018 19:54
    Moderador