none
Retornar objeto a partir de datagridview em outro formulário RRS feed

  • Pergunta

  • Eu tenho o seguinte código: 

            private void PesquisaAluno_Load(object sender, EventArgs e)
            {
                ConfiguraDataGrid();

                foreach (var aluno in alunos)
                {
                    dg.Rows.Add(aluno.Nome, aluno.Cpf, aluno.Matricula.IdCurso);
                }
            }

            private void ConfiguraDataGrid()
            {
                dg.Columns.Add("dg_Nome", "Nome");
                dg.Columns.Add("dg_Cpf", "CPF");
                dg.Columns.Add("dg_Curso", "Curso");
                dg.ReadOnly = true;
                dg.AllowUserToAddRows = false;

                foreach (DataGridViewColumn column in dg.Columns)
                {
                    if (column.DataPropertyName == "Nome")
                        column.Width = 300; //tamanho fixo da primeira coluna

                    column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                }

                dg.AutoGenerateColumns = false;

            }

    Eu quero que, a partir do momento que eu clicar em alguma celula  de uma linha, o metodo dg_CellContentClick monte o objeto inteiro (aluno) e retorne para a tela anterior. Como posso fazer isso? 


    • Editado Lucasbustos domingo, 25 de março de 2018 17:21
    domingo, 25 de março de 2018 17:21

Respostas

  • Olá amigo,

    Tente assim:

      dataGridView2.CellContentClick += (s, ev) =>
                {
                    if (ev.RowIndex > -1)
                    {
                        Aluno aluno = this.dataGridView2[ev.ColumnIndex, ev.RowIndex].OwningRow.DataBoundItem as Aluno;
                    }
                };

    Para retornar para o form anterior crie uma propriedade de evento no form de pesquisa, exemplo:

            public Action<Aluno> PopularResultadoPesquisa { get; set; }

    Altere o método acima para:

        dataGridView2.CellContentClick += (s, ev) =>
                    {
                        if (ev.RowIndex > -1)
                        {
                            Aluno aluno = this.dataGridView2[ev.ColumnIndex, ev.RowIndex].OwningRow.DataBoundItem as Aluno;
                            if (this.PopularResultadoPesquisa != null) this.PopularResultadoPesquisa(aluno);
                        }
                    };

    Para finalizar, no form anterior (no form que você "chama" o form de pesquisa) crie este evento: 

        formPesquisa.PopularResultadoPesquisa = (resultado) =>
                {
    
                    Aluno aluno = resultado;
                    //Aqui voce continua sua lógica
    
                };


    Espero ter ajudado! 

    Um abraço!




    domingo, 25 de março de 2018 18:13