No SQL Server, crie o Banco de Dados e as tabelas abaixo:
CREATE TABLE tbVendedor ( codigo INT IDENTITY(1,1) NOT NULL,
nome_Vendedor VARCHAR(40) NOT NULL,
percentual_Comissao FLOAT NOT NULL,
PRIMARY KEY(codigo)
)
CREATE TABLE tbComissao ( lancamento INT IDENTITY(1,1) NOT NULL,
codigo_Vendedor INT NOT NULL,
data DATE NOT NULL,
valor DECIMAL(10,2) NOT NULL,
total_Comissao DECIMAL(10,2) NOT NULL,
PRIMARY KEY(lancamento),
FOREIGN KEY(codigo_Vendedor) REFERENCES tbVendedor(codigo)
)
No Visual Studio, crie uma nova solução.
Name: ctrComissao
Nome do formulário: frmPrincipal.cs
Text: Controle de Comissão
StartPosition: CenterScreen
MaximizeBox: False
FormBorderStyle: Fixed3D
Crie o menu com os seguintes itens:
&Cadastro | &Controle |
&Vendedor | &Comissão |
Sai&r | |
Vá até o Menu Projects e clique em Add Class. Coloque o nome: Conexao
Deixe conforme exemplo abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
Foi criado o atributo conexao como nulo, e private, pois seu alcance será somente para esta classe. A seguir criado o método público stringConexao, que é o que vai retornar para todas as classes, formulários e relatórios que for solicitada a conexão com o banco de dados. Assim é retornado através do get a instância do sql (.\SQLEXPRESS); o nome do banco (Initial Catalog).
Vá até o Menu Projects e clique em Add Class. Coloque o nome: clsVendedor. Abaixo, foram definidos os métodos: salvar, alterar, pesquisarNome e pesquisarCodigo.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
public void salvar(string nome_vendedor, decimal
percentual_comissao) {
using (SqlConnection conexao = new
SqlConnection(Conexao.stringConexao))
try
{
{
conexao.Open();
sql.Append("INSERT INTO vendedor (nome_vendedor, percentual_comissao,
situacao)");
sql.Append("VALUES (@nome_vendedor, @percentual_comissao, @situacao)");
cmd.Parameters.Add(new SqlParameter("@nome_vendedor", nome_vendedor));
cmd.Parameters.Add(new SqlParameter("@percentual_comissao",
percentual_comissao));
cmd.CommandText = sql.ToString();
cmd.Connection = conexao;
cmd.ExecuteNonQuery();
}
}
catch (Exception erro)
{
throw new Exception(erro.Message);
}
finally
{
conexao.Close();
conexao.Dispose();
cmd.Dispose();
}
}
public void alterar(int codigo, string nome_vendedor,
decimal percentual_comissao) {
using (SqlConnection conexao = new
SqlConnection(Conexao.stringConexao))
try
{
{
conexao.Open();
sql.Append("UPDATE vendedor");
sql.Append(" SET nome_vendedor = @nome_vendedor, percentual_comissao =
@percentual_comissao");
sql.Append(" WHERE (codigo = @codigo)");
cmd.Parameters.Add(new SqlParameter("@codigo", codigo));
cmd.Parameters.Add(new SqlParameter("@nome_vendedor", nome_vendedor));
cmd.Parameters.Add(new SqlParameter("@percentual_comissao",
percentual_comissao));
cmd.CommandText = sql.ToString();
cmd.Connection = conexao;
cmd.ExecuteNonQuery();
}
}
catch (Exception erro)
{
throw new Exception(erro.Message);
}
finally
{
conexao.Close();
conexao.Dispose();
cmd.Dispose();
}
}
public DataTable pesquisarNome(string nomeVendedor) {
using (SqlConnection conexao = new
SqlConnection(Conexao.stringConexao))
try
{
{
conexao.Open();
sql.Append("SELECT * FROM vendedor");
sql.Append(" WHERE nome_vendedor LIKE '%' + @nomeVendedor + '%'");
sql.Append(" ORDER by nome_vendedor");
cmd.Parameters.Add(new SqlParameter("@nomeVendedor", nomeVendedor));
cmd.CommandText = sql.ToString();
cmd.Connection = conexao;
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw new Exception(erro.Message);
}
finally
{
conexao.Close();
conexao.Dispose();
cmd.Dispose();
}
}
public DataTable pesquisarCodigo(int codigo) {
using (SqlConnection conexao = new
SqlConnection(Conexao.stringConexao))
try
{
{
conexao.Open();
sql.Append("SELECT * FROM vendedor");
sql.Append(" WHERE codigo = @codigo");
sql.Append(" ORDER BY unidade");
cmd.Parameters.Add(new SqlParameter("@codigo", codigo));
cmd.CommandText = sql.ToString();
cmd.Connection = conexao;
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw;
}
finally
{
conexao.Close();
conexao.Dispose();
cmd.Dispose();
}
}
}
}
Crie o formulário de vendedor
Nome do formulário: frmVendedor.csControle | Name | Text | Maxlength | Enabled |
GroupBox | gbOpcoes | Opções | ||
Button | btnNovo | &Novo | btnNovo | |
Button | btnSalvar | &Salvar | ||
Button | btnCancelar | &Cancelar | btnCancelar | |
GroupBox | gbDados | Dados | ||
Label | lblCodigo | Código: | ||
TextBox | txtCodigo | False | ||
Label | lblnomeVendedor | Vendedor: | ||
TextBox | txtnomeVendedor | 50 | ||
Label | lblpercentualComissao | % Comissão: | ||
TextBox | txtpercentualComissao | 30 |
Codificação do botão cancelar:
Duplo clique no
botão Cancelar e entre as { } deixe como abaixo:
private void btnCancelar_Click(object sender, EventArgs e)
{
gpbDados.Enabled = false;
btnSalvar.Enabled = false;
btnNovo.Enabled = true;
limpar();
}
Como a subrotina limpar não criada, observe que ficou sublinhado na cor vermelha, sendo apresentado erro. Logo abaixo da chave do fechamento do código que você inseriu do botão cancelar, digite o código abaixo:
private void limpar()
{
foreach (Control ctl in gpbDados.Controls)
{
if (ctl is TextBox) ctl.Text = "";
if (ctl is MaskedTextBox) ctl.Text = "";
if (ctl is ComboBox) ctl.Text = "";
if (ctl is CheckBox) (ctl as CheckBox).Checked = false;
}
}
Codificação do botão novo:
Duplo clique no botão
Novo e entre as { } deixe como abaixo:
private void btnNovo_Click(object sender, EventArgs e)
{
btnSalvar.Enabled = true; // Habilita o botão
btnNovo.Enabled = false; // Desabilita o botão
gpbDados.Enabled = true;
btnNovo.Tag = "Incluir";
txtnomeVendedor.Focus();
}
Codificação do botão salvar:
Duplo clique no botão
Salvar e entre as { } deixe como abaixo:
private void btnSalvar_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Deseja Salvar ?", "Salvar", MessageBoxButtons.YesNo)
== DialogResult.Yes)
{
try // Tenta incluir o vendedor na tabela
{
clsvendedor classeVendedor = new clsvendedor();
if (btnNovo.Tag.ToString() == "Incluir") // Se clicou no botão Novo
{
classeVendedor.salvar(txtnomeVendedor.Text,
Convert.ToDecimal(txtpercentualComissao.Text)); // Passa os parâmetros:
nome do vendedor, percentual de comissão para o método salvar que está na
classe clsVendedor
MessageBox.Show("Vendedor incluído com sucesso!", "Salvar",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
classeVendedor.alterar(Convert.ToInt32(txtCodigo.Text),
txtnomeVendedor.Text, Convert.ToDecimal(txtpercentualComissao.Text));
MessageBox.Show("Vendedor salvo com sucesso!", "Salvar",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception ex) // Caso não consiga incluir o vendedor, o catch gera
excessão (erro) que fica armazenada no ex.
{
MessageBox.Show(ex.Message, "Erro:", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
finally // O finally é importante, já que no try acima, se deu tudo certo
e salvou o vendedor, ou no catch apresentou erro, é fechada a conexão com
o banco.
{
btnCancelar_Click(sender, e);
exibirGrid();
btnNovo.Tag = "";
}
}
}
A subrotina exibirGrid também apresenta o sublinhado em vermelho, pois ainda não foi criada. Faça a criação da mesma, conforme abaixo:
private void exibirGrid() {
clsvendedor classeVendedor = new clsvendedor();
dgvVendedor.DataSource = classeVendedor.pesquisarNome("");
cabecalho();
}
A subrotina cabecaho também apresenta o sublinhado em vermelho, pois ainda não foi criada. Faça a criação da mesma, conforme abaixo:
private void cabecalho() {
dgvVendedor.Columns[0].HeaderText = "Código"; // Título da coluna
dgvVendedor.Columns[0].Width = 60; // Largura da coluna
dgvVendedor.Columns[0].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight; // Alinha à direita e na
vertical
dgvVendedor.Columns[1].HeaderText = "Nome do vendedor";
dgvVendedor.Columns[1].Width = 160;
dgvVendedor.Columns[2].HeaderText = "% Com.";
dgvVendedor.Columns[2].Width = 50;
dgvVendedor.Columns[2].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
}
A seguir, vamos utilizar o evento DoubleClick do controle DataGrid para exibir em cada caixa de textos do formulário, o conteúdo referente a caixa coluna da tabela de vendedor. Selecione o DataGridView e vá até o evento DoubleClick. Quando encontra-lo, duplo clique. Veja imagem abaixo:
private void dgvVendedor_DoubleClick(object sender, EventArgs
e)
{
txtCodigo.Text = dgvVendedor.CurrentRow.Cells[0].Value.ToString(); //
CurrentRow é a linha onde foi efetuado o duplo clique. Cells[0] refere-se
a primeira coluna do DataGrid - Value obtém o valor armazenado ali.
txtnomeVendedor.Text =
dgvVendedor.CurrentRow.Cells[1].Value.ToString();
txtpercentualComissao.Text =
dgvVendedor.CurrentRow.Cells[2].Value.ToString();
gpbDados.Enabled = true;
btnNovo.Enabled = false;
btnSalvar.Enabled = true;
btnNovo.Tag = "Editar";
txtnomeVendedor.Focus();
}
A seguir, vamos codificar a caixa de textos Pesquisar, ou seja: quando digitarmos as iniciais do vendedor, ou até mesmo um conteúdo que pode estar no início, no meio ou no final do nome do mesmo, será exibido no DataGrid.
Duplo clique na caixa de textos txtPesquisar. Entre as { } digite o código abaixo:
private void txtPesquisa_TextChanged(object sender, EventArgs
e)
{
clsvendedor classeVendedor = new clsvendedor();
dgvVendedor.DataSource =
classeVendedor.pesquisarNome(txtPesquisa.Text);
}
A seguir, selecione a caixa de textos txtpercentualComissao. No evento KeyPress, vamos inserir o código abaixo para só permitir a digitação de números e a vírgula:
private void txtpercentualComissao_KeyPress(object sender,
KeyPressEventArgs e)
{
if (!char.IsDigit(e.KeyChar)) //se não for número
{
if (e.KeyChar != ',') //se for vírgula
e.Handled = true;
else if (txtpercentualComissao.Text.IndexOf(',') > 0)
e.Handled = true;
}
}
Para finalizar, vamos inserir o código do evento load do formulário, ou seja: Quando o formulário de vendedor foi inicializado, será carregado o código do botão cancelar e os dados salvos na tabela no DataGridView. Selecione o formulário (de preferência na barra de título, para ter perigo de selecionar outro controle). Você também pode efetuar duplo clique na barra de título, pois o evento padrão do formulário é o Load.
private void frmVendedor_Load(object sender, EventArgs e)
{
btnCancelar_Click(sender, e); // Executa a codificação do botão
cancelar
exibirGrid();
}
Crie a classe de comissão: clsComissao.cs
A seguir, declare as classes para manipular os dados da tabela de comissão, conforme abaixo
A seguir, declare o método inserir, conforme abaixo
Abaixo do método inserir, declare o método editar:
Abaixo do método editar, declare o método pesquisarLancamento:
A seguir crie o método pesquisacodigoVendedor:
A seguir crie o método pesquisacodigoData:
Formulário de comissão:
Crie o formulário abaixo:
Controle | Name | Text | Maxlength | Enabled |
GroupBox | gbOpcoes | Opções | ||
Button | btnNovo | &Novo | btnNovo | |
Button | btnSalvar | &Salvar | ||
Button | btnCancelar | &Cancelar | ||
Button | btnPesquisar | &Pesquisar | ||
GroupBox | gbDados | Dados | ||
Label | lblLancamento | Lançamento: | ||
TextBox | txtLancamento | False | ||
Label | lblVendedor | Vendedor: | ||
ComboBox | cmbVendedor | |||
TextBox | txtcodigoVendedor | |||
Label | lblData | Data: | ||
MaskedTextBox | mskData | Mask: | 00/00/0000 | |
Label | lblValor | Valor: | ||
TextBox | txtValor | 10 | ||
Label | lblpercentualComissao | % da Comissão: | ||
TextBox | txtpercentualComissao | 5 | ||
Label | lbltotalComissao | Total da Comissão: | ||
TextBox | txttotalComissao | 10 |
Duplo clique no botão btnCancelar e insira o código conforme abaixo
Como a subrotina limpar não criada, observe que ficou sublinhado na cor vermelha, sendo apresentado erro. Logo abaixo da chave do fechamento do código que você inseriu do botão cancelar, digite o código abaixo:
Volte ao Design do Form. Duplo clique na barra de título, para ter acesso ao evento Load e insira o código conforme abaixo:
Duplo clique no combo do vendedor:
Codificação do botão Novo:
Codificação do botão Salvar:
Observe que a subrotina calcula_Comissao, precisa ser criada já que está sublinhada na cor vermelha. Logo abaixo do botão salvar, crie a mesma conforme abaixo:
Crie o formulário para pesquisar a comissão dos vendedores, conforme abaixo:
Controle | Name | Text | ||
GroupBox | gbOpcoes | Opções | ||
RadioButton | rbLancamento | Lançamento | ||
RadioButton | rbVendedor | Vendedor | ||
RadioButton | rbData | Data | ||
RadioButton | rbTodos | Todos | ||
Fora do groupbox opções: | ||||
Label | lblLancamento | Informe o Lançamento: | ||
TextBox | txtLancamento | |||
Label | lblVendedor | Vendedor: | ||
ComboBox | cmbVendedor | |||
Label | lbldataInicial | Data Inicial: | ||
MaskedTextBox | mskdataInicial | Mask: 00/00/0000 | ||
Label | lbldataFinal | Data Final: | ||
MaskedTextBox | mskdataFinal | Mask: 00/00/0000 | ||
GroupBox | gbExibir | Exibir | ||
Button | btnExibir | &Exibir | ||
Button | btnSair | Sai&r |
Duplo clique na barra de título e insira o código abaixo:
Codificação do botão Sair:
Codificação do botão Exibir:
Crie a subrotina cabecalho:
Adicionando máscara nas caixas de textos data. Será utilizado o evento Enter para as duas caixas maskedttextbox: mskdataInicial e mskdataFinal, conforme abaixo:
Codificação do radiobutton rbTodos:
Codificação do radiobutton rbData:
Codificação do radiobutton rbVendedor:
Codificação do radiobutton rbLancamento:
Vá até a classe clsComissão, e crie a variável lancamento. Ela será responsável por armazenar o lançamento da comissão dentro da pesquisa de comissão e a seguir, utilizar no lançamento da comissão no formulário de controle da comissão.
Selecione o DataGridView. No evento DoubleClick, insira o código conforme abaixo:
Volte ao formulário de lançamento da comissão (frmComissao.cs). No botão Pesquisar, insira o código conforme abaixo: