NOVA SELE?ÃO

ALANTB 08/10/2015 13:07:56
#452314
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...!!!!
F001E 08/10/2015 14:24:22
#452319
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....
ALANTB 09/10/2015 08:30:22
#452355
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???
}
F001E 09/10/2015 09:08:33
#452357
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();
}

ALANTB 09/10/2015 09:15:59
#452358
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.
ACCIOLLY 09/10/2015 09:22:10
#452360
Resposta escolhida
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

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í
ALANTB 09/10/2015 12:04:39
#452372
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
}
ACCIOLLY 09/10/2015 14:13:44
#452380
Ao invés de você setar o [Ô]Text[Ô] vc seta o [Ô]SelectedValue[Ô] do combo

comboBox1.SelectedValue = dados.Rows[0][[Ô]codCargo[Ô]].ToString();


Té mais
ALANTB 10/10/2015 23:03:30
#452432
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...
ACCIOLLY 11/10/2015 08:31:45
#452434
Talvez seja uma questão de sequência, ou seja, o que você está chamando primeiro?
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.
ALANTB 13/10/2015 00:00:26
#452443
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
Tópico encerrado , respostas não são mais permitidas