Sistema de Controle de Comissão

No SQL Server, crie o Banco de Dados e as tabelas abaixo:

CREATE DATABASE bdComissao

USE bdComissao

CREATE TABLE tbVendedor ( codigo INT IDENTITY(1,1) NOT NULL,
nome_Vendedor VARCHAR(40) NOT NULL,
email VARCHAR(30) NOT NULL,
contato VARCHAR(15) NOT NULL,
percentual_Comissao DECIMAL(5,2) NOT NULL,
situacao CHAR(1) DEFAULT 'A',
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,
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  
   

Form Principal

Classe para conexão com o banco

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;

namespace ctrComissao
{
public class Conexao
{
private static string conexao = @"Data Source=.\SQLEXPRESS;Initial Catalog=bdComissao;user id=sa;password=sa";
public static string stringConexao
{
get { return conexao; }
}
}
}

Observação: Caso o banco não possua usuário, a string de conexão, será essa:

private static string conexao = @"Data Source=.\SQLEXPRESS;Initial Catalog=bdComissao; Integrated Security=True";

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;

namespace ctrComissao
{
public class clsvendedor
{
public void incluir(string nomeVendedor, string email, string contato, decimal percentualComissao)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
{
cn.Open();
string sql = @"INSERT INTO tbVendedor (nome_Vendedor, email, contato, percentual_Comissao)
VALUES (@nome_Vendedor, @email, @contato, @percentual_Comissao)";
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@nome_Vendedor", nomeVendedor);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@contato", contato);
cmd.Parameters.AddWithValue("@percentual_Comissao", percentualComissao);
cmd.ExecuteNonQuery();
}
}
}
catch (Exception)
{
throw;
}
}

public void editar(int codigo, string nomeVendedor, string email, string contato, decimal percentualComissao, string situacao)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
{
string sql = @"UPDATE tbVendedor
SET nome_Vendedor = @nome_Vendedor,
email = @email,
contato = @contato,
percentual_Comissao = @percentual_Comissao,
situacao = @situacao
WHERE codigo = @codigo";

using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@codigo", codigo);
cmd.Parameters.AddWithValue("@nome_Vendedor", nomeVendedor);
cmd.Parameters.AddWithValue("@email", email);
cmd.Parameters.AddWithValue("@contato", contato);
cmd.Parameters.AddWithValue("@percentual_Comissao", percentualComissao);

cn.Open();
cmd.ExecuteNonQuery();
}
}
}
catch (Exception)
{
throw;
}
}

public DataTable pesquisaCodigo(int codigo)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
{
string sql = @"SELECT Codigo, Nome_Vendedor, Email, Contato, Percentual_Comissao, situacao FROM tbvendedor WHERE codigo = @codigo";
using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.AddWithValue("@codigo", codigo);
cn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
}
}
}
catch (Exception)
{
throw;
}

public DataTable pesquisa_Vendedor(string nomeVendedor)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
{
string sql = @"SELECT Codigo, Nome_Vendedor, Email, Contato, Percentual_Comissao, situacao
FROM tbvendedor WHERE nome_Vendedor LIKE '%' + @nomeVendedor + '%'";

using (SqlCommand cmd = new SqlCommand(sql, cn))
{
cmd.Parameters.Add("@nomeVendedor", SqlDbType.VarChar).Value = nomeVendedor;
cn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
DataTable dt = new DataTable();
dt.Load(reader);
return dt;
}
}
}
}
catch (Exception)
{
throw;
}
}

Crie o formulário de vendedor

Nome do formulário: frmVendedor.cs
Text: Cadastro de Vendedor
StartPosition: CenterScreen
MaximizeBox: False
FormBorderStyle: Fixed3D

Inserir o controle Panel

Name: pnlTitulo
Text: Cadastro de Vendedor

Inserir o controle ToolStrip

Controle Name Text Maxlength Enabled
GroupBox gbOpcoes Opções    
Button tlbNovo &Novo btnNovo  
Button tlbSalvar &Salvar    
Button tlbCancelar &Cancelar btnCancelar  
Button tlbSair &Cancelar btnCancelar  
GroupBox gbDados Dados    
Label lblCodigo Código:    
TextBox txtCodigo     False
Label lblnomeVendedor Vendedor:    
TextBox txtnomeVendedor   60  
Label lblEmail E-mail:    
TextBox txtEmail   30  
Label lblContato Contato:    
TextBox txtContato   15  
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 o que está em negrito:

private void tlbCancelar_Click(object sender, EventArgs e)
{
tlbSalvar.Enabled = false;
tlbNovo.Enabled = true;
gpbDados.Enabled = false;
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, onde está em negrito:

private void tlbNovo_Click(object sender, EventArgs e)
{
tlbSalvar.Enabled = true;
tlbNovo.Enabled = false;
gpbDados.Enabled = true;
chkSituacao.Checked = true;
chkSituacao.Enabled = false;
tlbNovo.Tag = "Novo";
txtnomeVendedor.Focus();
}
}

Codificação do botão salvar:
Duplo clique no botão Salvar e entre as { } deixe como abaixo:

private void tlbSalvar_Click(object sender, EventArgs e)
{
if (txtnomeVendedor.Text == "")
{
MessageBox.Show("Informe o Nome do vendedor!");
txtnomeVendedor.Focus();
return;
}
if (txtpercentualComissao.Text == "")
{
MessageBox.Show("Informe o % da comissão!");
txtpercentualComissao.Focus();
return;
}
if (MessageBox.Show("Deseja Salvar ?", "Salvar", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
try
{
clsVendedor classeVendedor = new clsVendedor();
if (tlbNovo.Tag.ToString() == "Editar") // Se clicou duas vezes datagrid, o status altera para editar
{
string situacao = "";
if (chkSituacao.Checked)
{
situacao = "A";
}
else
{
situacao = "I";
}
classeVendedor.editar(Convert.ToInt32(txtCodigo.Text), txtnomeVendedor.Text, txtEmail.Text, mskContato.Text, Convert.ToDecimal(txtpercentualComissao.Text), situacao);
}
else
{
classeVendedor.incluir(txtnomeVendedor.Text, txtEmail.Text, mskContato.Text, Convert.ToDecimal(txtpercentualComissao.Text));
}
MessageBox.Show("Vendedor Salvo com sucesso ?", "Salvar", MessageBoxButtons.OK);
tlbCancelar_Click(sender, e);
exibirGrid();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

private void tlbCancelar_Click(object sender, EventArgs e)
{
tlbSalvar.Enabled = false;
tlbNovo.Enabled = true;
gpbDados.Enabled = false;
limpar();
}

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";
dgvVendedor.Columns[0].Width = 45;
dgvVendedor.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvVendedor.Columns[1].HeaderText = "Nome do vendedor";
dgvVendedor.Columns[1].Width = 160;
dgvVendedor.Columns[2].HeaderText = "E-mail";
dgvVendedor.Columns[2].Width = 130;
dgvVendedor.Columns[3].HeaderText = "Contato";
dgvVendedor.Columns[3].Width = 90;
dgvVendedor.Columns[4].HeaderText = "% Com.";
dgvVendedor.Columns[4].Width = 50;
dgvVendedor.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvVendedor.Columns[5].HeaderText = "Situação";
dgvVendedor.Columns[5].Width = 50;
}

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();
}

Codificação do botão Pesquisar, que está ao lado da caixa de textos pesquisar

private void btnPesquisar_Click(object sender, EventArgs e)
{
clsVendedor classeVendedor = new clsVendedor();
dgvVendedor.DataSource = classeVendedor.pesquisa_Vendedor(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:

Form Vendedor - Evento KeyPress

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

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ctrComissao
{
public class clsComissao
{
private string sqlBase = @"SELECT tbComissao.lancamento,
tbComissao.codigoVendedor,
tbVendedor.nome_vendedor,
tbComissao.data,
tbComissao.valor,
tbVendedor.percentual_Comissao,
(tbComissao.valor * tbVendedor.Percentual_Comissao) / 100 AS 'Total Comissão' FROM tbComissao
INNER JOIN tbVendedor ON tbComissao.codigoVendedor = tbVendedor.codigo";

A seguir, declare o método inserir, conforme abaixo

public void inserir(int codigo_vendedor, DateTime data, decimal valor)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = "INSERT INTO tbComissao (codigoVendedor, data, valor) VALUES (@codigoVendedor, @data, @valor)";
cmd.CommandText = sql;
cmd.Connection = cn;

cmd.Parameters.AddWithValue("@codigoVendedor", codigo_vendedor);
cmd.Parameters.AddWithValue("@data", data);
cmd.Parameters.AddWithValue("@valor", valor);

cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}
}

Abaixo do método inserir, declare o método editar:

public void editar(int lancamento, int codigoVendedor, DateTime data, decimal valor)
{

{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = @"UPDATE tbComissao
SET codigoVendedor = @codigoVendedor, data = @data, valor = @valor WHERE lancamento = @lancamento";
cmd.CommandText = sql;
cmd.Connection = cn;

cmd.Parameters.AddWithValue("@lancamento", lancamento);
cmd.Parameters.AddWithValue("@codigoVendedor", codigoVendedor);
cmd.Parameters.AddWithValue("@data", data);
cmd.Parameters.AddWithValue("@valor", valor);

cmd.ExecuteNonQuery();
}
}
catch (Exception)
{
throw;
}
}

Abaixo do método editar, declare o método pesquisarLancamento:

public DataTable pesquisaLancamento(int lancamento)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = sqlBase + " WHERE tbComissao.lancamento = @lancamento ORDER BY tbComissao.lancamento";
cmd.CommandText = sql;
cmd.Connection = cn;
cmd.Parameters.AddWithValue("@lancamento", lancamento);

DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw;
}
}

A seguir crie o método pesquisacodigoVendedor:

public DataTable pesquisacodigoVendedor(int codigoVendedor)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = sqlBase + " WHERE tbVendedor.codigo = @codigoVendedor ORDER BY tbComissao.data";
cmd.CommandText = sql;
cmd.Connection = cn;
cmd.Parameters.AddWithValue("@codigoVendedor", codigoVendedor);

DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw;
}
}

A seguir crie o método pesquisacodigoData:

public DataTable pesquisaData(DateTime dataInicial, DateTime dataFinal)
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = sqlBase + " WHERE tbComissao.data BETWEEN @dataInicial AND @dataFinal ORDER BY tbComissao.data";
cmd.CommandText = sql;
cmd.Connection = cn;
cmd.Parameters.AddWithValue("@dataInicial", dataInicial);
cmd.Parameters.AddWithValue("@dataFinal", dataFinal);

DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw;
}
}

A seguir crie o método pesquisaTodos:

public DataTable pesquisaTodos()
{
try
{
using (SqlConnection cn = new SqlConnection(clsConexao.stringConexao))
using (SqlCommand cmd = new SqlCommand())
{
cn.Open();
string sql = sqlBase + " ORDER BY tbComissao.data";
cmd.CommandText = sql;
cmd.Connection = cn;

DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());
return dt;
}
}
catch (Exception)
{
throw;
}
}

Crie a variável estática abaixo:

public static int lancamento;

Formulário de comissão:

Crie o formulário abaixo:

Form Comissão

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

private void tlbCancelar_Click(object sender, EventArgs e)
{
tlbNovo.Enabled = true;
tlbSalvar.Enabled = false;
gpbDados.Enabled = false;
tlbNovo.Text = "&Novo";
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;
}
lblMensagem.Text = "";
}

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:

private void frmComissao_Load(object sender, EventArgs e)
{
tlbCancelar_Click(sender, e);
}

Codificação do botão Novo:

private void tlbNovo_Click(object sender, EventArgs e)
{
tlbSalvar.Enabled = true;
tlbNovo.Enabled = false;
grbDados.Enabled = true;
tlbNovo.Tag = "Incluir";
mskData.Text = DateTime.Now.ToString("dd/MM/yyyy");
txtcodigoVendedor.Focus();
}

Codificação do botão Salvar:

private void tlbSalvar_Click(object sender, EventArgs e)
{
if (txtValor.Text.Length == 0)
{
MessageBox.Show("Informe o Valor da Venda!", "Valor", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtValor.Focus();
return;
}

if (txtpercentualComissao.Text.Length == 0)
{
MessageBox.Show("Você tem que Informar o Vendedor para obter o % de Comissão!", "% Comissão", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbVendedor.Focus();
return;
}

if (txtcodigoVendedor.Text.Length == 0)
{
MessageBox.Show("Informe o Código do Vendedor!", "Vendedor", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbVendedor.Focus();
return;
}

if (MessageBox.Show("Deseja Salvar ?", "Salvar", MessageBoxButtons.YesNo) == DialogResult.Yes)
{

calcula_Comissao(); //Chama a rotina para calcular a comissão

var valorSemMascara = "";
mskData.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals; // Retira a máscara para efetuar a validação abaixo
valorSemMascara = mskData.Text;
if (valorSemMascara == "")
{
MessageBox.Show("Informe a Data!", "Data", MessageBoxButtons.OK, MessageBoxIcon.Error);
mskData.Focus();
return;
}

mskData.TextMaskFormat = MaskFormat.IncludePromptAndLiterals; // Insere a máscara na data

DateTime dataVenda;
if (!DateTime.TryParse(mskData.Text, out dataVenda)) // Tenta (verifica) se a data informada não estiver correta. out dataVenda é a saída se é verdadeiro ou falso
{
MessageBox.Show("Data Inválida!", "Data", MessageBoxButtons.OK, MessageBoxIcon.Error);
mskData.Focus();
return;
}

try
{
clsComissao classeComissao = new clsComissao();
if (tlbNovo.Tag.ToString() == "Incluir")
{
classeComissao.inserir(int.Parse(txtcodigoVendedor.Text), Convert.ToDateTime(mskData.Text), decimal.Parse(txtValor.Text));
MessageBox.Show("Comissão incluída com sucesso!", "Salvar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
classeComissao.editar(Convert.ToInt32(txtLancamento.Text), int.Parse(txtcodigoVendedor.Text), Convert.ToDateTime(mskData.Text), decimal.Parse(txtValor.Text));
MessageBox.Show("Comissão editada com sucesso!", "Editar", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

}
catch (Exception erro)
{
MessageBox.Show(erro.Message, "Erro:", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

finally
{
tlbCancelar_Click(sender, e);
tlbNovo.Tag = "";
}
}
}

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:

private void calcula_Comissao()
{
try
{
decimal valor = Decimal.Parse(txtValor.Text); // Converte o valor da venda para decimal e armazena na variável valor
decimal PercentualComissao = decimal.Parse(txtpercentualComissao.Text); // Converte o percentual de comissão para decimal e armazena na variável percentualComissao
decimal totalComissao = (valor * PercentualComissao) / 100; // Multiplica o valor da venda pelo percentual da comissão dividindo por cem, para extrair o percentual armazenando o resultado na variável totalComissao
txttotalComissao.Text = totalComissao.ToString(); // Converte o totalComissao para string para que seja possível exibi-lo na caixa de textos txttotalComissao
}
catch (Exception erro)
{
MessageBox.Show(erro.Message);
}
}

Codificação da caixa de textos do código do vendedor txtcodigoVendedor e no evento KeyDown, insira o código abaixo:
private void txtcodigoVendedor_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F2)
{
e.SuppressKeyPress = true;

// Instancia o formulário usando o bloco 'using' para liberar memória após o uso
using (frmPVendedor formPesquisa = new frmPVendedor())
{
// Abre o formulário e espera o resultado
if (formPesquisa.ShowDialog() == DialogResult.OK)
{
// Recupera os dados diretamente das propriedades do formulário de pesquisa
txtcodigoVendedor.Text = formPesquisa.CodigoSelecionado.ToString();
cmbVendedor.Text = formPesquisa.NomeSelecionado;
txtpercentualComissao.Text = formPesquisa.ComissaoSelecionada.ToString();

mskData.Focus();
}
else
{
// Se o usuário fechou sem selecionar nada (ou clicou em cancelar)
tlbCancelar_Click(sender, e);
}
}
}
}

Crie o formulário para pesquisar a comissão dos vendedores, conforme abaixo:

Form Pesquisa de Comissão

 

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:

private void frmPComissao_Load(object sender, EventArgs e)
{
clsVendedor classeVendedor = new clsVendedor();
cmbVendedor.DataSource = classeVendedor.pesquisa_Vendedor("");
cmbVendedor.DisplayMember = "nome_vendedor";
cmbVendedor.ValueMember = "codigo";
cmbVendedor.SelectedIndex = -1;
}

Codificação do botão Fechar:

private void btnFechar_Click(object sender, EventArgs e)
{
this.Close();
}

Codificação do botão Exibir:

private void btnExibir_Click(object sender, EventArgs e)
{
clsComissao classeComissao = new clsComissao();
if (rbtLancamento.Checked)
{
if (txtLancamento.Text.Length == 0)
{
MessageBox.Show("Informe o lançamento!", "Lançamento", MessageBoxButtons.OK, MessageBoxIcon.Error);
txtLancamento.Focus();
return;
}
dgvComissao.DataSource = classeComissao.pesquisaLancamento(Convert.ToInt32(txtLancamento.Text));
}
if (rbtVendedor.Checked)
{
if (cmbVendedor.SelectedIndex == -1)
{
MessageBox.Show("Informe o Vendedor!", "Vendedor", MessageBoxButtons.OK, MessageBoxIcon.Error);
cmbVendedor.Focus();
return;
}
dgvComissao.DataSource = classeComissao.pesquisacodigoVendedor(Convert.ToInt32(cmbVendedor.SelectedValue));
}
if (rbtData.Checked)
{
var valorSemMascara = "";
mskdataInicial.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
valorSemMascara = mskdataInicial.Text;
if (valorSemMascara == "")
{
MessageBox.Show("Informe a Data Inicial!", "Data Inicial", MessageBoxButtons.OK, MessageBoxIcon.Error);
mskdataInicial.Focus();
return;
}
mskdataFinal.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
valorSemMascara = mskdataFinal.Text;
if (valorSemMascara == "")
{
MessageBox.Show("Informe a Data Final!", "Data Final", MessageBoxButtons.OK, MessageBoxIcon.Error);
mskdataFinal.Focus();
return;
}
mskdataInicial.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;
mskdataFinal.TextMaskFormat = MaskFormat.IncludePromptAndLiterals;
dgvComissao.DataSource = classeComissao.pesquisaData(Convert.ToDateTime(mskdataInicial.Text), Convert.ToDateTime(mskdataFinal.Text));
}
if (rbtTodos.Checked)
{
dgvComissao.DataSource = classeComissao.pesquisaTodos();
}
cabecalho(); // Chama o método local para formatar o DataGrid
}

Crie a subrotina cabecalho:

private void cabecalho()
{
if (rbtLancamento.Checked == false && rbtVendedor.Checked == false && rbtData.Checked == false && rbtTodos.Checked == false)
{
MessageBox.Show("Selecione o campo para pesquisa!", "Pesquisa", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}

dgvComissao.Columns[0].HeaderText = "Lancto";
dgvComissao.Columns[0].Width = 50;
dgvComissao.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvComissao.Columns[1].HeaderText = "CodVend";
dgvComissao.Columns[1].Width = 70;
dgvComissao.Columns[1].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvComissao.Columns[2].HeaderText = "Nome do Vendedor";
dgvComissao.Columns[2].Width = 180;
dgvComissao.Columns[3].HeaderText = "Data";
dgvComissao.Columns[3].Width = 70;
dgvComissao.Columns[4].HeaderText = "Valor";
dgvComissao.Columns[4].Width = 80;
dgvComissao.Columns["valor"].DefaultCellStyle.Format = "c2";
dgvComissao.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
dgvComissao.Columns[5].HeaderText = "% com.";
dgvComissao.Columns[5].Width = 30;
dgvComissao.Columns[6].HeaderText = "Total Com.";
dgvComissao.Columns[6].Width = 75;
dgvComissao.Columns["Total Comissão"].DefaultCellStyle.Format = "c2";
dgvComissao.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
}

Codificação dos radiobutton:

limpar();

private void limpar()
{
txtLancamento.Text = "";
cmbVendedor.Text = "";
mskdataInicial.Text = "";
mskdataFinal.Text = "";
}

Selecione o DataGridView. No evento DoubleClick, insira o código conforme abaixo:

private void dgvComissao_DoubleClick(object sender, EventArgs e)
{
clsComissao.lancamento = Convert.ToInt32(dgvComissao[0, dgvComissao.CurrentRow.Index].Value.ToString());
this.Dispose();
}

Volte ao formulário de lançamento da comissão (frmComissao.cs).
No botão Pesquisar, insira o código conforme abaixo:

private void tlbPesquisar_Click(object sender, EventArgs e)
{
frmPComissao pesquisaComissao = new frmPComissao();
pesquisaComissao.ShowDialog();

if (clsComissao.lancamento != 0) // Se o conteúdo da variável lancamento não for zero
{
gpbDados.Enabled = true; // Habilita o groupbox
txtLancamento.Text = clsComissao.lancamento.ToString(); // Pega o conteúdo da variável lancamento (que como é estática, ela pode ser compartilhada em qualquer classe, form) e armazena na caixa de textos txtLancamento
clsComissao classeComissao = new clsComissao(); // Instancia a classe comissão
DataRow linha = classeComissao.pesquisaLancamento(Convert.ToInt32(txtLancamento.Text)).Rows[0]; // A classe DataRow permite localizar a linha, referente ao número neste caso do lançamento
txtcodigoVendedor.Text = Convert.ToString(linha["codigoVendedor"]);
cmbVendedor.Text = Convert.ToString(linha["nome_vendedor"]); // A variável linha mais a coluna nome_vendedor, pega o o conteúdo que está armazenada na mesma, e armazena no combobox do vendedor
mskData.Text = Convert.ToString(linha["data"]);
txtValor.Text = Convert.ToString(linha["valor"]);
txtpercentualComissao.Text = Convert.ToString(linha["percentual_Comissao"]);
txttotalComissao.Text = Convert.ToString(linha["Total Comissão"]);
calcula_Comissao(); //Chama a rotina para efetuar o cálculo da comissão
gpbDados.Enabled = true;
tlbNovo.Enabled = false;
tlbSalvar.Enabled = true;
tlbNovo.Tag = "Editar";
cmbVendedor.Focus();
}
else
{
tlbCancelar_Click(sender, e);
}
}