NOVA SELE?ÃO
Olá, no meu sistema tem um form (frmSelFunc) onde tem um grid com a listagem de funcionários. Para ALTERAR um funcionário basta duplo clique no grid ou clicar no botão alterar para que seja exibido o frmCadFunc (cadastro). O que informa ao form de cadastro se é uma ALTERAÇÃO ou um cadastro novo (ADICIONAR) é a parametrização que está entre parênteses, conforme abaixo:
//No frmSelFunc
//ALTERAR
string Codigo = dataGridView1.CurrentRow.Cells[0].Value.ToString();//aqui pega o valor da primeira coluna do grid
frmCadFunc cadastro = new frmCadFunc(0,Codigo);//0 = alterar;1= adicionar.E o “Codigo†da 1º coluna do grid.
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
//ADICIONAR
frmCadFunc cadastro = new frmCadFunc(1, [Ô][Ô]);//1= adicionar
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
------------------------------------------------------
//No frmCadFunc de cadastro:
public frmCadFunc(int NovoCadastro, string codCli)
{
InitializeComponent();
this.CadEdit = NovoCadastro;
this.codigoFuncionario = codCli;// aqui fala que a variavel de classe recebe o valor do parametro
}
private void frmCadFunc_Load(object sender, EventArgs e)
{
if(CadEdit == 0)//editar
{
BuscaFunc();
CalcIdade = Convert.ToDateTime(maskedTextBox1.Text);
lblIdade.Text = calculaIdade(CalcIdade).ToString();
}
if (CadEdit == 1)//novo
{
txtNome.Focus();
}
O problema é o seguinte: no cadastro de funcionário uma das informações é o cargo (codCargo). Ao lado do txtCodCargo coloquei um Button para abrir um pequeno form com a lista de cargos (Código e Cargo) para o usuário, caso não saiba o código do cargo a ser cadastrado, selecioná-lo em um gridview com doubleclick.Entretanto com as parametrizações dos forms já existentes como inserir o código do cargo direto no txtCodCargo sem apagar as informações dos outros campos que foram carregados com o evento ALTERAR. Ou até mesmo no evento ADICIONAR, pois creio que essa seleção deve ser feita por fora dos parâmetros exibidos acima porque cada vez que o frmCadFunc é carregado no evento LOAD é feita a verificação inicial novamente: se é ADIÇÃO ou ALTERAÇÃO, ETC...!!!!
//No frmSelFunc
//ALTERAR
string Codigo = dataGridView1.CurrentRow.Cells[0].Value.ToString();//aqui pega o valor da primeira coluna do grid
frmCadFunc cadastro = new frmCadFunc(0,Codigo);//0 = alterar;1= adicionar.E o “Codigo†da 1º coluna do grid.
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
//ADICIONAR
frmCadFunc cadastro = new frmCadFunc(1, [Ô][Ô]);//1= adicionar
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
------------------------------------------------------
//No frmCadFunc de cadastro:
public frmCadFunc(int NovoCadastro, string codCli)
{
InitializeComponent();
this.CadEdit = NovoCadastro;
this.codigoFuncionario = codCli;// aqui fala que a variavel de classe recebe o valor do parametro
}
private void frmCadFunc_Load(object sender, EventArgs e)
{
if(CadEdit == 0)//editar
{
BuscaFunc();
CalcIdade = Convert.ToDateTime(maskedTextBox1.Text);
lblIdade.Text = calculaIdade(CalcIdade).ToString();
}
if (CadEdit == 1)//novo
{
txtNome.Focus();
}
O problema é o seguinte: no cadastro de funcionário uma das informações é o cargo (codCargo). Ao lado do txtCodCargo coloquei um Button para abrir um pequeno form com a lista de cargos (Código e Cargo) para o usuário, caso não saiba o código do cargo a ser cadastrado, selecioná-lo em um gridview com doubleclick.Entretanto com as parametrizações dos forms já existentes como inserir o código do cargo direto no txtCodCargo sem apagar as informações dos outros campos que foram carregados com o evento ALTERAR. Ou até mesmo no evento ADICIONAR, pois creio que essa seleção deve ser feita por fora dos parâmetros exibidos acima porque cada vez que o frmCadFunc é carregado no evento LOAD é feita a verificação inicial novamente: se é ADIÇÃO ou ALTERAÇÃO, ETC...!!!!
Porque não carrega as informações no Focus() do TextBox ? Assim....
Na frente no txtCodCargo você colocou um button para abrir um pequeno form. Abra esse form em modo Modal pois com isso cria uma especie de [Ô]BreakPoint[Ô] no código, assim..
frmCadCargo CadCargo = new frmCadCargo();
CadCargo.ShowModal();
txtCadCargo.Focus();
...ou seja, só vai dar Focus no txtCadCargo quando você fechar o frmCadCargo e no Evento txtCadCargo_Focus() você carga as informações somente no Cargo do funcionário preservando os dados dos Funcionário já carregados....
Na frente no txtCodCargo você colocou um button para abrir um pequeno form. Abra esse form em modo Modal pois com isso cria uma especie de [Ô]BreakPoint[Ô] no código, assim..
frmCadCargo CadCargo = new frmCadCargo();
CadCargo.ShowModal();
txtCadCargo.Focus();
...ou seja, só vai dar Focus no txtCadCargo quando você fechar o frmCadCargo e no Evento txtCadCargo_Focus() você carga as informações somente no Cargo do funcionário preservando os dados dos Funcionário já carregados....
F001E, para abrir o form para selecionar o cargo, estou usando o comando click abaixo. Porém não permite ShowModal. O máximo que consigo escrever é [Ô]selecionar.Modal[Ô], mas como concluir a linha de comando. Porque escrevo isso e coloco parenteses, ponto e vÃrgula e o c# fica sublinhando a linha em vermelho dizendo que não pode ser usado.
private void btnSelCargo_Click(object sender, EventArgs e)
{
frmCargoSel selecionar = new frmCargoSel();
selecionar.MdiParent = Program.principal;
selecionar.Show();
}
TENTANDO ISSO:
private void btnSelCargo_Click(object sender, EventArgs e)
{
frmCargoSel selecionar = new frmCargoSel();
selecionar.MdiParent = Program.principal;
selecionar.Modal // O QUE FALTA AQUI???
}
private void btnSelCargo_Click(object sender, EventArgs e)
{
frmCargoSel selecionar = new frmCargoSel();
selecionar.MdiParent = Program.principal;
selecionar.Show();
}
TENTANDO ISSO:
private void btnSelCargo_Click(object sender, EventArgs e)
{
frmCargoSel selecionar = new frmCargoSel();
selecionar.MdiParent = Program.principal;
selecionar.Modal // O QUE FALTA AQUI???
}
ALANTB..é ShowDialog(); e não Modal. Confundi com VB6 e quando o form for ShowDialog não precisa mais do selecionar.MdiParent.
private void button1_Click(object sender, EventArgs e)
{
Form2 selecionar = new Form2();
selecionar.ShowDialog();
}
Pessoal, nesse segundo form que seleciona o código do cargo a seleção do grid é assim:
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
string Codigo = dataGridView1.CurrentRow.Cells[0].Value.ToString();//aqui pega o CÓDIGO que preciso carregar no txtCodCargo do formCadFunc
frmCadFunc cadastro = new frmCadFunc(0, Codigo); O PROBLEMA SÃO ESSES PARÂMETROS ENTRE PARÊNTESES
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
}
EXEMPLO: dei duplo clique no cargo de código número 4, ao carregar no frmCadFunc, apagou todos os campos anteriores e inseriu todos os campos com o cadastro do FUNCIONÃRIO de código número 4.
private void dataGridView1_DoubleClick(object sender, EventArgs e)
{
string Codigo = dataGridView1.CurrentRow.Cells[0].Value.ToString();//aqui pega o CÓDIGO que preciso carregar no txtCodCargo do formCadFunc
frmCadFunc cadastro = new frmCadFunc(0, Codigo); O PROBLEMA SÃO ESSES PARÂMETROS ENTRE PARÊNTESES
cadastro.MdiParent = Program.principal;
cadastro.Show();
this.Dispose();
}
EXEMPLO: dei duplo clique no cargo de código número 4, ao carregar no frmCadFunc, apagou todos os campos anteriores e inseriu todos os campos com o cadastro do FUNCIONÃRIO de código número 4.
Bo dia alan
Tenho uma solução melhor pra vc rsrsrs!
utilize combobox.
Tipo assim, ao invés de vc carregar outro form pra selecionar o cargo, vc carrega os dados da tabela cargos nesse combo.
no combobox vc enxerga o nome do cargo, mas na verdade vc está selecionando o código. a codificação seria assim
Daà chame esse método no Load do Form
Quanto a adicionar um novo cargo coloque um Botão do lado do seu Combo que faça isso, e utilize InputBox pra adicionar as informações de que precisa;
Como o InputBox pertence ao VB, é necessário vc adicionar uma referencia do Microsoft.VisualBasic no seu projeto:
add reference => Framework => Microsoft.VisualBasic.
Faça a importação da classe no seu form de cadastro
e quando for chamar o Inputbox faça assim
Daà é só criar um método de INSERT pra gravar esse novo cargo, e ao final desse método chame novamente o método carregaCargos() pra dar um refresh no combo.
Por fim quando for gravar o funcionário é só recuperar o valor selecionado no seu combobox
em caso de dúvida ao montar o form, dá uma olhada na imagem q coloquei em anexo;
Qualquer outra dúvida estamos aÃ
Tenho uma solução melhor pra vc rsrsrs!
utilize combobox.
Tipo assim, ao invés de vc carregar outro form pra selecionar o cargo, vc carrega os dados da tabela cargos nesse combo.
no combobox vc enxerga o nome do cargo, mas na verdade vc está selecionando o código. a codificação seria assim
private void carregaCargos(){
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM cargos ORDER BY nomeCargo[Ô]);
ComboBox1.Text = [Ô][Ô];
ComboBox1.ValueMember = [Ô]codCargo[Ô]; //O campo código da sua tabela vai aqui
ComboBox1.DisplayMember = [Ô]NomeCargo[Ô];//O que o usuário enxerga vai aqui
ComboBox1.DataSource = dados; //O combo pega os dados recuperados
}
Daà chame esse método no Load do Form
Quanto a adicionar um novo cargo coloque um Botão do lado do seu Combo que faça isso, e utilize InputBox pra adicionar as informações de que precisa;
Como o InputBox pertence ao VB, é necessário vc adicionar uma referencia do Microsoft.VisualBasic no seu projeto:
add reference => Framework => Microsoft.VisualBasic.
Faça a importação da classe no seu form de cadastro
using Microsoft.VisualBasic;
e quando for chamar o Inputbox faça assim
string nomeCargo = Interaction.InputBox([Ô]Informe o nome do Cargo a Inserir[Ô], [Ô][Ô], [Ô][Ô], 100, 200);
Daà é só criar um método de INSERT pra gravar esse novo cargo, e ao final desse método chame novamente o método carregaCargos() pra dar um refresh no combo.
Por fim quando for gravar o funcionário é só recuperar o valor selecionado no seu combobox
string codCargo = ComboBox1.SelectedValue.ToString();
em caso de dúvida ao montar o form, dá uma olhada na imagem q coloquei em anexo;
Qualquer outra dúvida estamos aÃ
ACCIOLLY, vou aceitar sua idéia. Já está carregando os cargos no frmCadFunc. Só que ,como fica para o combo exibir um cargo já cadastrado para um funcionário, caso o usuário for editar. Usando a rotina abaixo:
private void BuscaFunc()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbFunc WHERE codFunc = [Ô] + codigoFuncionario);
txtNome.Text = dados.Rows[0][[Ô]Nome[Ô]].ToString();// AQUI Tà OK
maskedTextBox1.Text = dados.Rows[0][[Ô]DataNasc[Ô]].ToString();//AQUI Tà OK
comboBox1.Text = dados.Rows[0][[Ô]codCargo[Ô]].ToString();// AQUI Tà PUXANDO A LISTA, NÃO O QUE Jà ESTA CADASTRADO NO CASO DE EDITAR
}
private void BuscaFunc()
{
Conexao conn = new Conexao();
DataTable dados = conn.Pesquisar([Ô]SELECT * FROM tbFunc WHERE codFunc = [Ô] + codigoFuncionario);
txtNome.Text = dados.Rows[0][[Ô]Nome[Ô]].ToString();// AQUI Tà OK
maskedTextBox1.Text = dados.Rows[0][[Ô]DataNasc[Ô]].ToString();//AQUI Tà OK
comboBox1.Text = dados.Rows[0][[Ô]codCargo[Ô]].ToString();// AQUI Tà PUXANDO A LISTA, NÃO O QUE Jà ESTA CADASTRADO NO CASO DE EDITAR
}
Ao invés de você setar o [Ô]Text[Ô] vc seta o [Ô]SelectedValue[Ô] do combo
Té mais
comboBox1.SelectedValue = dados.Rows[0][[Ô]codCargo[Ô]].ToString();
Té mais
ACCIOLLY, mesmo com a linha acima para o combo, está carregando a lista de cargos no combo e não seleciona no combo o cargo cadastrado anteriormente para edição do funcionário. Mesmo depois de um novo cadastro só fica exibindo a lista...
Talvez seja uma questão de sequência, ou seja, o que você está chamando primeiro?
Ex: no seu evento Load do form.
qualquer coisa me manda seu proj pra eu dar uma olhada. Ou entao a codificação da sua classe inteira.
Ex: no seu evento Load do form.
private void frmCadFunc_Load(object sender, EventArgs e)
{
if(CadEdit == 0)//editar
{
[txt-color=#e80000]BuscaCargo(); //mesmo quando for editar vc preenche o combo primeiro, pra depois buscar o funcionário [/txt-color]
BuscaFunc();
CalcIdade = Convert.ToDateTime(maskedTextBox1.Text);
lblIdade.Text = calculaIdade(CalcIdade).ToString();
}
if (CadEdit == 1)//novo
{
BuscaCargo(); //Preenche combo primeiro pra depois focar no textbox
txtNome.Focus();
}
qualquer coisa me manda seu proj pra eu dar uma olhada. Ou entao a codificação da sua classe inteira.
ACCIOLLY, não tinha visto, mas a linha responsável na edição e adição estava comentada. Já arrumei e funcionou. Valeu ai....tô encerrando por aqui..!!!!
ALAN
ALAN
Tópico encerrado , respostas não são mais permitidas