Passar Dados Entre Formulários [C Sharp - Visual Studio]

29/04/2019

12

Olá pessoal,

Sou desenvolvedor a algum tempo em outra linguagem e estou tendo problemas para entender algumas coisas da linguagem C# e como ela funciona, estou desenvolvendo no Visual Studio 2017 com banco de dados MySQL e nessa dúvida fiz uma consulta contendo a empresa cadastrada e ao clicar no botão Editar Dados, gostaria que carregasse os dados no FORM de cadastro para o usuário ALTERAR e gravar, o problema não é INCLUIR/ALTERAR é carregar os dados do DATAGRIDVIEW para a outra tela nos TEXTBOXs, tenho uma classe clssUtil onde contém um get/set da empresa, podem me dar idéias?

Percebi que os componente TextBox vem no modo PRIVATE e se alterar para PUBLIC consigo referenciar ele no outro FORM mas não gostaria de mudar isso.

Alguém pode ajudar?

"Se você se irrita com os críticos, você pode ter certeza de que quase sempre eles estão certos".
// == By Stephen King == //
Responder

Post mais votado

29/04/2019

Fala Anderson! Acredito que você tenha uma classe empresa na sua aplicação. Crie uma instância da classe empresa no escopo desta tela de cadastro com o modificador public static, para que esteja disponível em qualquer ponto do código desta tela. Ex.: public static Empresa empresaAtual; No seu DataGridView adicione um evento SelectionChanged. Neste evento você vai capturar o id da respectiva empresa e realizar uma consulta ao banco de dados, preenchendo o objeto empresaAtual e depois você preenche os campos do formulário com os campos deste objeto.

Código no evento SelectionChanged do DataGridView:

string id = DataGridView.CurrentRow.Cells[0].Value.ToString(); // Supondo que o campo id da empresa seja a primeira coluna


com a variável id você vai consulta o banco de dados por uma empresa com este id, e se retornar resultados vai preencher as propriedades do objeto empresaAtual.
dando continuidade ao código do evento SelectionChanged do DataGridView:

string sql = "select * from empresas where id ="+id;
using (MySqlCommand command = new MySqlCommand(sql, conn)) // troque conn pela conexão ao mysql que você já criou
{
conn.Open();
using (MySqlDataReader dr = command.ExecuteReader())
{
while (dr.Read()) {
empresaAtual .ID = (int)dr["id"];
empresaAtual .Nome = (String) dr["Nome"];
// vai preenchendo as outras propriedades do objeto empresaAtual
}
}

}


em seguida adicione o código para preencher o formulário com as propriedade do objeto empresaAtual.
Responder

Mais Posts

Que dedicação na resposta Sr. Renato, muito obrigado, mas se vou ter que fazer uma nova consulta pegando somente o ID do meu registro, que é a minha chave primária, porque eu não faço uma variável no formulário de destino do tipo publica que seria preenchida no momento de abertura do formulário e faço a consulta já na outra tela com essa variável ao invés de fazer tudo isso?

Se estiver certo e for melhor a minha ideia me diga ai Sr. Renato, preciso fazer o que for melhor e não mais fácil.

Obrigado mais uma vez.
Responder

29/04/2019

Ramiro Porto


Boa noite. Existe inúmeras maneiras de passar valores entre forms.. Lembre-se que form em C# é uma classe.
vc pode usar propriedade publica do seu form, passar via construtor do form , usar uma classe estática global e etc..
Eu prefiro passar no contrutor.. segue exemplo


public partial class frmCadastro : Form
{

public frmCadastro()
{
InitializeComponent();
}

//sobre carga do construtor
public frmCadastro(EmpresaDto empresa)
{
InitializeComponent();
this.mEmpresa = empresa;
}

// sua classe empresa
EmpresaDto mEmpresa;


void FrmCadastroLoad(object sender, EventArgs e)
{
if(mEmpresa!=null){
carregarControles();
}
}

void carregarControles(){
//aqui vc preenche seus controles
}
}

Responder
Pô legal assim, bom... vou verificar as ideias postadas e depois vamos ver como eu resolvi e coloco aqui como ficou.

Valeu a todos que ajudaram.

Abraço forte.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira