No SQL Server, crie o Banco de Dados e as tabelas abaixo:
CREATE DATABASE bdFolha
Store Procedure
No Visual Studio, crie uma nova solução.
Name: ctrFolha
Nome do formulário: frmPrincipal.cs
Text: Folha de Pagamento
StartPosition: CenterScreen
MaximizeBox: False
FormBorderStyle: Fixed3D
Crie o menu com os seguintes itens:
&Cadastro | &Folha |
&Funcionários | &Manutenção |
Sai&r | |
Clique no menu Cadastro e na opção Funcionários acima, digite o código abaixo:
frmFuncionarios formFuncionarios = new frmFuncionarios();
formFuncionarios.ShowDialog();
No menu Cadastro e na opção Sair e digite o código: Application.Exit();
Na janela do Solution Explorer, duplo clique no arquivo App.Config, e deixe como abaixo:
Este arquivo é responsável por conectar ao banco de dados.
Vá até o Menu Projects e clique em Add Class. Coloque o nome: clsGlobal
Deixe como abaixo:
Esta classe é responsável pela passagem de valores as variáveis criadas na mesma, no qual o seu valor poderá ser visualizado em qualquer form, classe, já que static permite utiliza-las como variável global.
Classe para acesso a banco de dados
Quando você adiciona uma classe, são inseridas as bibliotecas básicas, como abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ctrFolha
{
class Class1
{
}
}
Como precisamos utilizar banco de dados, é necessário declarar as bibliotecas.
Vá até o Menu Projects e clique em Add Class. Coloque o nome: clsFuncionarios
Para recuperar do arquivo app.config, a conexão com o banco, faça os procedimentos abaixo:
- Clique com o botão direito sobre References na janela do Solution Explorer;
- Na janela que abriu, na opção Framework, selecione na janela no lado direito: System Configuration;
Deixe o código da classe como abaixo:
Observe que ConfigurationManager, SqlConnection e SqlCommand estão sublinhados em vermelho.
E necessário inserir as bibliotecas:
- System.Configuration --> para ConfigurationManager;
- System.Data.SqlClient --> para utilizar as classes: SqlConnection e SqlCommand;
- System.Data --> para utilizar as classes: DataReader, DataRow
Vá até as declarações using na parte superior e digite:
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
Criação do método inserir, editar e pesquisar
Para inserir, editar e pesquisar na tabela de funcionarios, é necessário criar os métodos, conforme abaixo:
Criação do formulário de funcionários
Vá até o Menu Projects / Add Windows Form. No Name digite: frmFuncionarios.
Monte o formulário conforme abaixo:
Controle | Name | Text | Maxlength | Enabled |
GroupBox | gbOpcoes | Opções | ||
Button | btnNovo | &Novo | ||
Button | btnEditar | &Editar | ||
Button | btnCancelar | &Cancelar | ||
Button | btnPesquisar | &Pesquisar | ||
Button | btnSair | Sai&r | ||
GroupBox | gbDados | Dados | ||
Label | lblCodigo | Código: | ||
TextBox | txtCodigo | 5 | False | |
Label | lblFuncionario | Nome do Funcionário | ||
TextBox | txtFuncionario | 50 | ||
Label | lbldtAdmissao | Dt Admissão | ||
DateTimePicker | dtpdataAdmissao | |||
Label | lblCTPS | CTPS | ||
TextBox | txtCTPS | 30 | ||
CheckBox | chkSituacao | Situação |
Codificando o formulário
Duplo clique no botão cancelar:
A subrotina limpar ficará grifada em vermelho, pois ainda não foi criada. Clique abaixo da chave de fechamento acima, para cria-la:
Vá até o evento load do formulário, e deixe como abaixo:
private void frmMunicipios_Load(object sender, EventArgs e)
{
btnCancelar_Click(sender, e);
}
Vá até o evento click do botão Novo, e deixe como abaixo:
A linha: opcao =1 e incluir_editar ficarão sublinhadas, já que a primeira precisa declarar a variável e a segunda criar a subrotina.
Vá até o início do form e deixe como abaixo:
int opcao = 0;
Ela deverá ficar antes da linha: public frmFuncionarios()
A seguir, crie a subrotina abaixo:
Criação do formulário de pesquisa de funcionários
Controle | Name | Text |
GroupBox | gbOpcoes | Opções |
RadioButton | rbNome | Nome |
RadioButton | rbCTPS | CTPS |
TextBox | txtPesquisa | |
Button | btnPesquisar | Pesquisar |
Button | btnSair | Sai&r |
DataGridView | dgvFuncionarios |
Selecione o datagridview e na seta para desmarcar as opções: Enable Adding, Enable Editing, Enable Deleting
Codificação do botão pesquisar:
private void btnPesquisar_Click(object sender, EventArgs e)
{
if (rbNome.Checked) // Se a opção selecionada for pelas iniciais do nome do funcionário
{
clsFuncionarios objFuncionarios = new clsFuncionarios();
dgvFuncionarios.DataSource= objFuncionarios.pesquisaFuncionariosNome(txtPesquisa.Text);
}
if (rbCTPS.Checked) // Se a opção selecionada for pelas iniciais da carteira de trabalho
{
clsFuncionarios objFuncionarios = new clsFuncionarios();
dgvFuncionarios.DataSource = objFuncionarios.pesquisaFuncionariosCTPS(txtPesquisa.Text);
}
cabecalho(); // Chama esta subrotina para mudar o nome de cada coluna referente a cada coluna da tabela e a largura
}
Logo abaixo da chave de fechamento acima, crie a subrotina:
private void cabecalho()
{
dgvFuncionarios.Columns[0].HeaderText = "Código";
dgvFuncionarios.Columns[0].Width = 60;
dgvFuncionarios.Columns[1].HeaderText = "Nome do Funcionário";
dgvFuncionarios.Columns[1].Width = 150;
dgvFuncionarios.Columns[2].HeaderText = "Dt.Admissão";
dgvFuncionarios.Columns[2].Width = 90;
dgvFuncionarios.Columns[3].HeaderText = "CTPS";
dgvFuncionarios.Columns[3].Width = 90;
dgvFuncionarios.Columns[4].HeaderText = "Situação";
dgvFuncionarios.Columns[4].Width = 90;
}
Codificação do botão sair:
private void btnSair_Click(object sender, EventArgs e)
{
this.Close();
}
Codificação do botão pesquisar do formulário de cadastro de funcionários
private void btnPesquisar_Click(object sender, EventArgs e)
{
frmPFuncionarios objPesquisa = new frmPFuncionarios();
objPesquisa.ShowDialog();
if (clsGlobal.IdFuncionario == 0) return; // Senão pesquisou, não executa as linhas abaixo
txtCodigo.Text = clsGlobal.IdFuncionario.ToString(); // Armazena o conteúdo que veio do formulário de pesquisa de funcionários da variável idFuncionario para a caixa de textos txtCodigo
clsFuncionarios objFuncionarios = new clsFuncionarios(); // Cria a instancia objFuncionarios da classe clsFuncionarios
DataRow row = objFuncionarios.pesquisaFuncionariosId(clsGlobal.IdFuncionario).Rows[0]; // Cria a instancia row, utilizando a pesquisa pelo idFuncionario
txtNome.Text = row["nome"].ToString(); // Armazena o nome do funcionario na caixa de textos txtNome
dtpdataAdmissao.Value = Convert.ToDateTime(row["dataAdmissao"]);
txtCTPS.Text = row["ctps"].ToString();
bool situacao = bool.Parse(row["situacao"].ToString()); // Cria a variável tipo bool, já que a coluna situacao é do tipo bit, ou seja: verdadeiro ou falso
if (situacao == true)
{
chkSituacao.Checked = true;
chkSituacao.Text = "Ativo";
}
else
{
chkSituacao.Checked = false;
chkSituacao.Text = "Inativo";
}
gbDados.Enabled = true;
btnEditar.Enabled = true;
btnNovo.Enabled = false;
btnNovo.Text = "&Novo";
btnEditar.Text = "&Salvar";
txtNome.Focus();
}
Codificação do botão editar
private void btnEditar_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Deseja Salvar ?", "Salvar", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (txtCodigo.Text == "")
{
MessageBox.Show("Informe o Código do Funcionário!", "Funcionário", MessageBoxButtons.OK);
txtCodigo.Focus();
return;
}
if (txtNome.Text == "")
{
MessageBox.Show("Informe o Nome do Funcionário!", "Funcionário", MessageBoxButtons.OK);
txtNome.Focus();
return;
}
opcao = 2;
incluirEditar();
btnCancelar_Click(sender, e);
}
}
Adicione o formulário abaixo:
Controle | Name | Text | Maxlength | Enabled | Mask |
GroupBox | gbOpcoes | Opções | |||
Button | btnNovo | &Novo | |||
Button | btnEditar | &Editar | |||
Button | btnCancelar | &Cancelar | |||
Button | btnPesquisar | &Pesquisar | |||
Button | btnSair | Sai&r | |||
GroupBox | gbDados | Dados | |||
Label | lblmesAno | Mes/Ano: | |||
MaskedTextBox | mskmesAno | ##/#### | |||
Label | lblFuncionario | Funcionário | |||
ComboBox | cmbFuncionario | ||||
Label | lbldtSalario | Salário | |||
TextBox | txtSalario | 12 | |||
Label | lblpercentualINSS | % INSS | |||
TextBox | txtpercentualINSS | 5 | |||
Label | lblValorINSS | Vl. INSS | |||
TextBox | txtValorINSS | 12 |
Adicione a classe: clsFolha e crie os métodos abaixo:
Codificação do botão sair:
private void btnSair_Click(object sender, EventArgs e)
{
this.Close();
}
Codificação do botão cancelar:
Crie a subrotina limpar abaixo:
Codificação do evento load do formulário:
Codificação do botão novo:
A linha sublinhada: opcao = 1 indica que é necessário declarar esta variável. Vá até o início do form:
Também é necessário criar a subrotina incluirEditar:
Permitir somente números, vírgula nas caixas: salario, percentualINSS, valorINSS:
Selecione a caixa de textos txtSalario. Vá até o evento KeyPress, duplo clique sobre o mesmo e deixe como abaixo onde está destacado em vermelho:
Crie o método abaixo, que faz o cálculo do valor do INSS e do salário líquido:
Este método passa o conteúdo das caixas de textos para as variáveis;
Faz o cálculo do valor do inss e do salário líquido;
Se algum valor não for informado, o botão Novo ficará desabilitado, e será exibida a mensagem de erro.
Selecione a caixa txtvalorINSS. No evento onEnter, será chamada esta subrotina:
private void txtvalorINSS_Enter(object sender, EventArgs e)
{
calculo_valorINSS();
}
Insira também a chamada desta subrotina no botão Novo.
Crie o formulário de pesquisa da folha, conforme abaixo:
Controle | Name | Text | Mask |
GroupBox | gbOpcoes | Opções | |
RadioButton | rbMesAno | Mês/Ano | |
RadioButton | rbFuncionario | Funcionário | |
Label | lblMesAno | Mês/Ano: | |
MaskedTextBox | mskmesAno | ##/#### | |
Label | lblFuncionario | Funcionário | |
ComboBox | cmbFuncionario | ||
DataGridView | dgvFolha |
No DataGridView, clique na seta ao lado direito e desmarque as opções: Enable Adding, Enable Editing, Enable Deleting.
Codificação deste formulário:
No evento load, deixe como abaixo:
O código acima, já foi explicado no formulário frmFolha.
Crie a subrotina cabecalho, conforme abaixo:
private void cabecalho()
{
dgvFolha.Columns[0].HeaderText = "Mes/Ano";
dgvFolha.Columns[0].Width = 60;
dgvFolha.Columns[1].HeaderText = "Nome do Funcionário";
dgvFolha.Columns[1].Width = 150;
dgvFolha.Columns[2].HeaderText = "Dt.Admissão";
dgvFolha.Columns[2].Width = 90;
dgvFolha.Columns[3].HeaderText = "Salário";
dgvFolha.Columns[3].Width = 90;
dgvFolha.Columns["salario"].DefaultCellStyle.Format = "c2"; // Formata com estilo moeda
dgvFolha.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; // Alinha à direita horizontalmente, e ao centro verticalmente
dgvFolha.Columns[4].HeaderText = "% INSS";
dgvFolha.Columns[4].Width = 60;
dgvFolha.Columns["percentualINSS"].DefaultCellStyle.Format = "c2";
dgvFolha.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvFolha.Columns[5].HeaderText = "Vl.INSS";
dgvFolha.Columns[5].Width = 90;
dgvFolha.Columns[6].HeaderText = "Salário a receber";
dgvFolha.Columns[6].Width = 120;
dgvFolha.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvFolha.Columns["Salário a Receber"].DefaultCellStyle.Format = "c2";
}
No evento doubleclick do datagrid, insira o código abaixo:
private void dgvFolha_DoubleClick(object sender, EventArgs e)
{
clsGlobal.Ano_Mes = dgvFolha.CurrentRow.Cells[0].Value.ToString(); // Armazena na variável global Ano_Mes o conteúdo da linha atual da coluna 1. (Cells[0]) é a primeira coluna.
this.Close(); // Fecha este formulário
}
Volte ao formulário frmFolha e no botão pesquisar deixe como abaixo:
Controle ReportViewer
Este controle permite a criação de relatórios.
Vá até o formulário frmPrincipal, e crie o menu conforme abaixo:
Name: mnuRelatórios Text: &Relatórios
Name: mnuitemRelatorios Text: &Funcionários