Transferência de dados entre formulários

25/07/2014

0

Tenho um formulário de pesquisa de clientes.
Segue abaixo o código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TesteConsulta
{
public partial class frmClienteSelecionar : Form
{
public frmClienteSelecionar()
{
InitializeComponent();
}

private void btnPesquisar_Click(object sender, EventArgs e)
{

using (var ctx = new sigproEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
var resultado = from c in ctx.cliente //Dessa forma não funciona.
select new
{
c.Cliente_Id,
c.ClienteNome,
c.CpfCnpj,
c.DTCadastro,
c.DtNacimento
};
//var resultado = from c in ctx.cliente //Dessa forma funciona.
// select c;

dgvConsulta.DataSource = resultado.ToList();

}
}

private void btnConsultar_Click(object sender, EventArgs e)
{
cliente clienteSelecionado = (dgvConsulta.SelectedRows[0].DataBoundItem as cliente);

frmMedico frm = new frmMedico(clienteSelecionado);
frm.ShowDialog();
}

}
}

Após a consulta quero passar a linha selecionada para um outro formulário.
Segue código do formulário 2.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TesteConsulta
{
public partial class frmMedico : Form
{
public frmMedico(cliente Cliente)
{
InitializeComponent();

this.Text = "ESTUDO - Consulta Médico";
txtCodigo.Text = Cliente.Cliente_Id.ToString();
txtNome.Text = Cliente.ClienteNome;
txtCRM.Text = Cliente.CpfCnpj;
txtDTCadastro.Text = Cliente.DTCadastro.ToString();
txtDtNascimento.Text = Cliente.DtNacimento.ToString();
}
}
}

Se a consulta é realizada desta forma:
var resultado = from c in ctx.cliente //Dessa forma não funciona.
select new
{
c.Cliente_Id,
c.ClienteNome,
c.CpfCnpj,
c.DTCadastro,
c.DtNacimento
};

Os dados não são transferido para o outro formulário e apresenta o seguinte erro:
[img]http://arquivo.devmedia.com.br/forum/imagem/267760-20140725-105437.png[/img]

Agora se a consulta é feita desta forma:
var resultado = from c in ctx.cliente
select c;

dgvConsulta.DataSource = resultado.ToList();

O erro não acontece.

O que poderia ser...
Elessandro Poças

Elessandro Poças

Responder

Posts

25/07/2014

Itamar Souza

Bom dia

Veja se isso lhe ajuda:

//eviando
Session["nomedasession"] = "conteúdo que vai passar ";
Response.Redirect("nomedoformulário");
//recebendo
string SessionRecebe = (string)(Session["nomedasession"]);

Atenciosamente!
Responder

25/07/2014

Elessandro Poças

Session não seria apenas para ASP.
Pois estou usando windows form desktop.
Responder

25/07/2014

Joel Rodrigues

Adicione um breakpoint nesta linha e verifique se o clienteSelecionado está null.

frmMedico frm = new frmMedico(clienteSelecionado);
Responder

25/07/2014

Elessandro Poças

Joel,

Está como null.
Responder

25/07/2014

Elessandro Poças

Joel,

frmMedico frm = new frmMedico(clienteSelecionado); Nesta linha está como null.

Só que na linha anterior não está null:
cliente clienteSelecionado = (dgvConsulta.SelectedRows[0].DataBoundItem as cliente);


E agora...
Responder

25/07/2014

Joel Rodrigues

Então você já sabe onde está o erro. Tem que mudar a estratégia pra recuperar esse clienteSelecionado. Acho que é mais seguro você pegar algum campo chave no grid e filtrar a coleção de clientes por ele, obtendo assim o objeto Cliente.
Responder

26/07/2014

Elessandro Poças

Joel,
Obrigado pela sua ajuda, vou descrever abaixo uma forma que encontrei de fazer a passagem de informações de um DataGridView de um formulário de pesquisa para uma tela de cadastro.

Estou usando a linguagem C#, Entity Framework 5.0.0 e MSSQL Server 2012, fiz testes com MySQL 5.6 e também funcionou.

No formulário de pesquisa tenho os seguintes componentes:

01 TextBox com o nome de txtPesquisa;
01 Button com o nome de btnPesquisar;
01 DataGridView com o nome de dgvPesquisa;
01 Button com o nome de btnConsultar;

Segue abaixo código do formulário frmClienteSelecionar
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TesteConsulta
{
public partial class frmClienteSelecionar : Form
{
public frmClienteSelecionar()
{
InitializeComponent();
}

private void btnPesquisar_Click(object sender, EventArgs e) //Aqui faço uma consulta usando Linq e mando o resultado para o DataGridView
{

using (var ctx = new sigproEntities())
{
var resultado = from c in ctx.cliente
where c.Empresa_Id == 1 && c.ClienteNome.Contains(txtPesquisa.Text)
orderby c.ClienteNome
select new
{
c.Cliente_Id,
c.ClienteNome,
c.CpfCnpj
};

dgvConsulta.DataSource = resultado.ToList();
}
}

private void btnConsultar_Click(object sender, EventArgs e) //Evento do click do botão consultar.
{
int indice = dgvConsulta.CurrentRow.Index; //Variável que vai armazenar qual linha do DataGridView foi selecionada.
string temporaria = dgvConsulta[0, indice].Value.ToString(); //Variável que armazena a 1ª coluna do linha selecionada, que no caso da consulta realizada é o campo Cliente_Id.

frmMedico frm = new frmMedico(temporaria); //Chamo o formulário para qual quero passar o a variável.
frm.ShowDialog();
}
}
}

No formulário que vai receber os dados vamos deixa-lo da seguinte forma.
using System;
using System.Linq;
using System.Windows.Forms;

namespace TesteConsulta
{
public partial class frmMedico : Form
{
public frmMedico()
{
InitializeComponent();
}

public frmMedico(string idCliente) //Sobrecarga do método construtor original, mas que irá receber o código do cliente.
{
InitializeComponent();

this.Text = "ESTUDO - Consular Cliente";

using (var ctx = new sigproEntities()) //Crio o contexto
{
int id = Convert.ToInt32(idCliente); //converto o valor da string recebida do formulário de pesquisa para int.
var consulta = from c in ctx.cliente //Faço uma consulta Linq e paço como parâmetro de busca o ID do cliente.
where c.Cliente_Id == id
select new
{
c.Cliente_Id,
c.ClienteNome,
c.CpfCnpj,
c.DTCadastro,
c.DtNacimento
};

foreach (var item in consulta) //Onde paço os itens retornados da consulta para os campos da tela.
{
txtCodigo.Text = item.Cliente_Id.ToString();
txtNome.Text = item.ClienteNome;
txtCRM.Text = item.CpfCnpj;
txtDTCadastro.Text = item.DTCadastro.ToString();
txtDtNascimento.Text = item.DtNacimento.ToString();
}
}
}
}
}

Obrigado a todos pelo apoio. Espero que este simples exemplo possa ajudar a todos da comunidade.
Responder

28/07/2014

Joel Rodrigues

Show de bola. Obrigado por compartilhar conosco a solução encontrada.
Um abraço e bons códigos.
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar