SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
NS TUTORIAIS
Desenvolvendo Sistema
de Ordem de Serviço em
C# utilizando o Banco de
Dados SQL Server
Tutorial
Natanael Santos
9/2/2011
Sistema desenvolvido para o Tutorial Desenvolvendo um Sistema de Ordem de Serviço com
Tela de Login, Tela de Splash, Cadastro de Cliente, Cadastro de Serviço, Controle de Acesso,
Ordem de Serviço e Relatórios.
Sumário
Introdução......................................................................................................................... 2
1.Criação do Banco de Dados........................................................................................... 3
2. Criando o Projeto.......................................................................................................... 5
3. Conexão com o Banco.................................................................................................. 6
4. Tela de Login.............................................................................................................. 13
5. Tela de Splash............................................................................................................ 21
6. Tela de Usuário.......................................................................................................... 24
7. Tela de Serviço.......................................................................................................... 32
8. Tela de Cliente........................................................................................................... 40
9. Tela Ordem de Serviço............................................................................................... 48
10. Tela Principal............................................................................................................ 53
11. Relatório Cliente....................................................................................................... 62
12. Relatório Serviço...................................................................................................... 67
13. Relatório Ordem de Serviço ..................................................................................... 67
nstutoriais.blogspot.com Página 2
Introdução
O Sistema de Ordem de Serviço foi desenvolvido pelo blog
nstutoriais.blogspot.com para aprendizagem. O Sistema conta com uma Tela de Splash,
Tela de Login, Tela Principal, Cadastro de Usuário, Cadastro de Cliente, Cadastro de
Serviço, Ordem de Serviço, Relatório de Cliente,Serviço e Ordem de Serviço.
O Sistema esta dividido em doze partes que seguem uma lógica.
1º Parte: Criação do Banco de Dados usando o SQL Server: Neste 1ª Parte é
desenvolvido o banco de dados contendo três tabelas.
2ª Parte: Criando o Projeto: Utilizando o Visual Studio para desenvolver o
Sistema.
3ª Parte: Conexão com o Banco de Dados: Nesta parte e feita à conexão com o
banco de dados para o Sistema.
4º Parte: Tela de Login: Responsável por fazer o controle de usuário no
formulário
5ª Parte: Tela de Splash: Responsável por carregar o sistema
6º Parte: Tela de Usuário: Responsável por inserir, excluir e atualizar os
usuários do sistema.
7º Parte: Tela de Serviço: Responsável pelo Cadastro de Serviço.
8º Parte: Tela de Cliente: Responsável pelo Cadastro de Cliente.
9º Parte: Tela Ordem de Serviço: Responsável por Emitir a Ordem de Serviço.
10º Parte: Tela de Principal: Responsável por fazer a junção dos formulários.
11º Parte: Relatório Cliente: Responsável por mostrar todos os Clientes
cadastrados no sistema
12º Parte: Relatório Serviço: Responsável por mostrar todos os Serviços
cadastrados no sistema
13º Parte: Relatório Ordem de Serviço: Responsável por mostrar todas as
Ordens de Serviço cadastradas no sistema
nstutoriais.blogspot.com Página 3
1.Criação do Banco de Dados
Entre no SQL Server e clique em New Query e adicione o código a Seguir:
/*Cria o banco de dados*/
create database Servico
/*Limpe a Query ou Instrução */
/*Coloca em uso o banco de dados Servico*/
use Servico
/*Cria a tabela tbCliente*/
create table tbCliente
(
idCliente int primary key not null,
nome varchar(80) not null,
cpf char(14) not null,
telefone char(13),
endereco varchar(max),
bairro varchar(100),
cidade varchar(100),
estado varchar(100),
dataDia varchar(50),
cadastradoPor varchar(50)
)
nstutoriais.blogspot.com Página 4
/*Cria a tabela tbServico*/
create table tbServico
(
idServico int primary key not null,
nome varchar(80) not null,
descricao varchar(max),
observacao varchar(max),
valor decimal(10,2),
dataDia varchar(50),
cadastradoPor varchar(50)
)
/*Cria a tabela tbOrdemServico*/
create table tbOrdemServico
(
idOrdem int primary key not null,
idCliente int not null,
idServico int not null,
dataDia varchar(50),
cadastradorPor varchar(50),
/*Chave estrangeira idCliente*/
CONSTRAINT FK_tbOrdemServico_tbCliente_idCliente FOREIGN
KEY(idCliente) REFERENCES tbCliente(idCliente),
/*Chave estrangeira idServico*/
CONSTRAINT FK_tbOrdemServico_tbServico_idServico FOREIGN
KEY(idServico) REFERENCES tbServico(idServico)
)
/*Cria a tabela tbUsuario*/
create table tbUsuario(
idUsuario int primary key not null,
usuario varchar(50) not null,
senha varchar(50) not null,
repitaSenha varchar(50) not null,
nivelAcesso varchar(50) not null,
dataDia varchar(50),
cadastradorPor varchar(50)
)
nstutoriais.blogspot.com Página 5
2. Criando o Projeto
Crie o novo Projeto:
Selecione o Visual C#> Windows > Windows Applications:
Dê o nome de SISistema:
nstutoriais.blogspot.com Página 6
3. Conexão com o Banco
Selecione no menu Data > Add New Data Sources:
Selecione Database:
nstutoriais.blogspot.com Página 7
Selecione o botão Next:
Clique no botão New Connection:
Selecione Microsoft SQL Server Database File e depois Continue:
nstutoriais.blogspot.com Página 8
Clique no botão Browse e Selecione o Banco de Dados e clique em Test Connection
depois clique OK para sair da caixa de Diálogo e OK do Formulário Add Connection
para ir ao próximo formulário:
Atenção (Geralmente o endereço da pasta dos bancos de dados desenvolvido no SQL
Server para Window XP é:
C:Arquivos de programasMicrosoft SQL ServerMSSQL.1MSSQLData)
Clique em Next novamente e irá aparecer a caixa de Dialogo clique em Sim: Para
guardar o banco de dados no projeto.
nstutoriais.blogspot.com Página 9
Marque a Tables para selecionar todas as tabelas e clique em Finish.
A princípio não aconteceu nada. Clique no menu Data > Show Data Sources para
aparecer as tabelas do Banco de Dados.
Como na imagem:
nstutoriais.blogspot.com Página 10
Precisamos colocar os campos “código” de cada tabela como auto incremento. Na
Paleta Data Sources > pelo ícone Edit DataSet with Designer.
Clique na tabela tbOrdemServico > idOrdem. Na propriedade mude os campos a seguir:
Propriedades Valores
AutoIncrement True
AutoIncrementSeed 1
Clique na tabela tbServico > idServico. Na propriedade mude os campos a seguir:
Propriedades Valores
AutoIncrement True
AutoIncrementSeed 1
Clique na tabela tbCliente > idCliente. Na propriedade mude os campos a seguir:
Propriedades Valores
AutoIncrement True
AutoIncrementSeed 1
Clique na tabela tbUsuario > idUsuario. Na propriedade mude os campos a seguir:
Propriedades Valores
AutoIncrement True
AutoIncrementSeed 1
Salve e volte para o form1.cs;
Renomei o formulário form1.cs para frmLogin.cs;
nstutoriais.blogspot.com Página 11
Neste momento crie os formulários que iremos usar e depois volte para a Tela de Login;
Formulários
Clique no Solution Explorer > SiServico > botão direito > Add > New Folder > dê o
nome de Formulario:
Clique no Solution Explorer > Formulário > botão direito > Add > Windows Form > dê
o nome para cada formulário da seguinte forma:
nstutoriais.blogspot.com Página 12
frmSplash.cs
frmTelaPrincipal.cs
frmCliente.cs
frmServico.cs
frmOS.cs
frmUsuario.cs
frmRelCliente.cs
frmRelServico.cs
frmRelOS.cs
Feito isso a Solution Explorer devera ficar assim:
nstutoriais.blogspot.com Página 13
4. Tela de Login
Clique no formulário frmLogin.cs e mude as propriedades a seguir:
Propriedade Valores
Name frmLogin
FormBorderStyle FixedSingle
Icon Selecione o icone
MaximizeBox False
MinimizeBox False
Size 458; 229
StartPosition CenterScreen
Text Tela de Login
Clique na Paleta ToolBox > Common Controls > PictureBox e mude as propriedades a
seguir:
Propriedade Valores
Name bannerTelaLogin
Image Selecione a imagem
Location 0;0
Size 458; 87
Devera ficar assim o bannerTelaLogin:
nstutoriais.blogspot.com Página 14
Clique na paleta ToolBox > Containers> GroupBox e mude as propriedades:
Propriedade Valor
Location 37; 93
Size 377; 160
Text Insira o Login:
Devera ficar assim:
Na Paleta Data Sources(SHIFT + Alt + D) clique no sinal +:
Observe que os campos estão com o tipo TextBox, precisamos mudar os campos
usuário e nivelAcesso para ComboBox da seguinte forma:
Selecione o campo usuário clique na seta para baixo e selecione ComboBox, faça isso
com o campo nivelAcesso:
nstutoriais.blogspot.com Página 15
Observe que mudou as imagens dos campos:
Arraste os campos (usuário, nivelAcesso e senha) para a GroupBox e adicione dois
botões embaixo deles:
Observe que ele inseriu automaticamente uma barra e os componentes dela, remova
todos.
Mude os names dos botões para btnConectar e btnSair com os textos Conectar e Sair:
A ComboBox usuário (usuarioComboBox) fica responsável por mostrar todos os
usuários cadastrados no sistema para fazer isso segue o passo a passo:
nstutoriais.blogspot.com Página 16
Clique apenas uma vez no campo > Clique na seta superior a direita que ira aparecer >
Marque a opção “Use data bound items” como na imagem:
Em Data Source > Selecione a tabela tbUsuario. Como na imagem:
nstutoriais.blogspot.com Página 17
No Display Member > Selecione o que será visto pelo Usuário que é a coluna usuário.
Como na imagem:
No Value Display > Selecione a coluna que equivale ao Display Member. Como na
imagem:
Modifique as propriedades a seguir:
Propriedades Valores
AutoCompleteSOurce ListItems
DropDownStyle DropDownList
Size 121; 21
nstutoriais.blogspot.com Página 18
Na ComboBox Nível de Acesso clique uma vez > Clique na seta > Edit Items >
Deixe a primeira Linha vazia e digite Administrador e Operador em cada linha. Como
na imagem:
Modifique as propriedades da ComBoBox nivelAcesso a seguir:
Propriedades Valores
AutoCompleteSOurce ListItems
DropDownStyle DropDownList
Size 121; 21
Na TextBox Senha modifique as propriedades a seguir:
Propriedades Valores
PasswordChar ●
Clique duas vezes no botão Sair e digite o código a seguir:
Close(); //Para sair da aplicação
nstutoriais.blogspot.com Página 19
No topo da pagina digite o namespace a seguir:
using System.Data.SqlClient; //Classe Responsável pela Conexão com o SQL Server
Declare duas variáveis depois do public partial class frmLogin : Form
{
//Responsavel pelo Nivel de Acesso
public static string NivelAcesso;
//Responsavel por mostrar quem esta conectado no sistema
public static string usuarioConectado;
Como na imagem:
Volte para o Desing(F7), clique duas vezes no botão Conectar e digite o código:
try
{
//Verificar ser os campos estão preenchidos
if ((usuarioComboBox.Text != "") &&
(nivelAcessoComboBox.Text != "") && (senhaTextBox.Text != ""))
{
//Responsavel pelo Comando Sql
SqlCommand comm = new SqlCommand("Select * From
tbUsuario Where usuario = @usuario and " +
"senha = @senha and nivelAcesso=@nivel", conn);
//Parametizar os codigos
comm.Parameters.Add("@usuario",
SqlDbType.VarChar).Value = usuarioComboBox.Text;
comm.Parameters.Add("@senha", SqlDbType.VarChar).Value
= senhaTextBox.Text;
comm.Parameters.Add("@nivel", SqlDbType.VarChar).Value
= nivelAcessoComboBox.Text;
//Abre a conexão
conn.Open();
SqlDataReader reader = null;
//lê as linhas de uma base de dados SQL Server
reader = comm.ExecuteReader();
nstutoriais.blogspot.com Página 20
//Se tiver coisa pra lê faça:
if (reader.Read())
{
//Variaveil usuarioConectado recebe campo
usuarioComboBox.Text
usuarioConectado = usuarioComboBox.Text;
//Variavei nivelAcesso recebe o campo
nivelAcessoComboBox.Text
NivelAcesso = nivelAcessoComboBox.Text;
//Declara a variavel que recebe o formulario
frmTelaPrinciapal
frmTelaPrincipal p = new frmTelaPrincipal();
//Esconde o formulario Tela de Login
this.Hide();
//Mostrar o formulario frmTelaPrinciapl
p.Show();
}
else
{
MessageBox.Show("Usuário e/ou senha incorretas",
"Aviso de Segurança",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Todos os Campos são
obrigatórios",
"Aviso de Segurança",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
//Gerar a exceção
MessageBox.Show(ex.Message);
}
finally
{
//Finalizar tarefa
conn.Close();
}
Insira no evento Load do Fomulario frmLogin o código a seguir:
//Limpar a ComboBox
usuarioComboBox.SelectedIndex = -1;
Entre no event do Formulario Tela de Login e clique na propriedade FormClosed e
adicione o código a seguir:
Application.Exit();
nstutoriais.blogspot.com Página 21
5. Tela de Splash
Clique na Tela de Splash e mude as propriedades a seguir:
Propriedades Valores
Size 380; 251
BackgroundImage Selecione a imagem de Fundo
BackgroundImageLayout None
ControlBox False
FormBorderStyle None
Icon Selecione o ícone do formulário
MaximizeBox False
MinimizeBox False
ShowIcon False
ShowInTaskbar False
StartPostion CenterScreen
Text Iniciando...
Adicione uma ProgressBar faça isso Paleta ToolBox > Common Controls > ProgressBar
Mude as propriedades a seguir:
Propriedades Valores
Location 69; 216
MarqueeAnimationSpeed 1000
Size 251;23
Style Continuous
Adicone um Timer faça isso Paleta ToolBox > Components > Timer
Mude as propriedades a seguir:
Propriedades Valores
Enable True
Interval 32
Clique no ícone Event > Tick e duas vezes no TextBox corresponde a ele:
nstutoriais.blogspot.com Página 22
Digite o código a seguir:
//Incrementa 1
progressBar1.Increment(1);
//Ser a progrresBar 1 for igual a 100
if (progressBar1.Value == 100)
{
//Pare
timer1.Stop();
}
Volte para o Design (F7) e clique duas vezes no formulário insira o código a seguir:
//Código responsavel pela opacidade do formulario
this.Opacity = 0;
for (double cont = 0; cont <= 1; cont += 0.1)
{
this.Opacity = cont;
this.Refresh();
System.Threading.Thread.Sleep(15);
}
O Design do formulário deve ficar assim:
A Tela de Splash está pronta. Agora precisamos informar a Tela de Login que a Tela de
Splash irá aparecer primeira do que ela. Volte para a Tela de Login.
nstutoriais.blogspot.com Página 23
Insira a biblioteca a seguir
using System.Threading;
Dentro do Form1() adicione o seguinte:
Thread t = new Thread(new ThreadStart(SplashScreen));
t.Start();
Thread.Sleep(5000);
t.Abort();
Crie o método a seguir depois da chave de fechamento do Form1():
public void SplashScreen()
{
//Executar a Tela de Splash
Application.Run(new frmSplash());
}
O Código deverá fica assim (Esta em Azul o código):
nstutoriais.blogspot.com Página 24
6. Tela de Usuário
Clique no formulário frmUsuario e modifique as propriedades a seguir:
Propriedades Valores
Icon Selecione o Ícone
Size 565; 492
StartPostion CenterScreen
Text Cadastro de Usuário
Insira uma GroupBox e mude as propriedades a seguir:
Propriedades Valores
Location 12; 45
Size 533; 150
Text Cadastrar Usuário
Em Data Sources > tbUsuario > Mude o tipo de campo de DataGrid para Details como
na imagem:
nstutoriais.blogspot.com Página 25
Arraste o campo para dentro da GroupBox como na imagem:
Renomei as Labels e coloque no canto esquerdo como na imagem:
nstutoriais.blogspot.com Página 26
Renomeie o Text da Barra de Funcionalidade do formulário
Seguindo a ordem da esquerda para a direita:
Move first para Mover para o Primeiro
Move previous Para Mover para o Anterior
Current position Para Posição Atual
of {0} Para De {0} e ToolTip para Total de Registro
Move next Para Mover para o Próximo
Move last Para Mover para o Último
Add new Para Adicionar Registro
Delete Para Excluir Registro
Save Data para Salvar Registro
Insira os componentes na GroupBox a seguir:
Label Text = Filtrar Por
ComboBox Edit Items: Código, usuário e name = cbmFiltrar
Label Text = “=”
TextBox Name = txtPesquisar
Botão Name = btnPesquisar , Text = Pesquisar
Como na imagem:
nstutoriais.blogspot.com Página 27
Adicione uma groupBox mude a propriedade Text para Usuário(s) e arraste da paleta
Data Source a DataGridView da tabela tbUsuario. Como na imagem:
Clique na DataGridView na seta e clique em Dock in parent container. Como na
imagem:
Com isso a DataGridView ocupara o espaço inteiro da GroupBox.
nstutoriais.blogspot.com Página 28
Desabilite a Enable Adding, Enable Editing e Enable Deleting. Clique em Edit Column.
Coloque os campos a seguir como Visible = false;
Senha e repita a senha.
Como na imagem:
nstutoriais.blogspot.com Página 29
Nesta etapa modifique o HeaderText para mudar o Texto de exibição e Width para
mudar a largura de cada coluna.
Clique duas vezes no botão Pesquisar e insira o código:
try
{
if (cbmFiltrar.Text == "Código")
{
//Define a instrução Sql
string sql = "SELECT * FROM tbUsuario WHERE
idUsuario =" + txtPesquisar.Text + "";
//Lê os dados da variavel sql e conectar no cn
cmd = new SqlCommand(sql, cn);
//Abre conexão
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexão de banco de dados
que são usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memória.
DataTable usuario = new DataTable();
/* Adiciona ou atualiza linhas em um DataTable
para que correspondam na fonte de
* dados usando o DataTable.*/
da.Fill(usuario);
/*A tbUsuarioDataGridView recebe o DataTable
usuario*/
tbUsuarioDataGridView.DataSource = usuario;
//Fechar a conexão
}
if (cbmFiltrar.Text == "Usuário")
{
//define a instrução SQL
string sql = "SELECT * FROM tbUsuario WHERE
usuario LIKE '%" + txtPesquisar.Text + "%'";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable usuario = new DataTable();
da.Fill(usuario);
tbUsuarioDataGridView.DataSource = usuario;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
nstutoriais.blogspot.com Página 30
}
finally
{
cn.Close();
}
Feito isso o layout do formulário deve ficar assim:
Mude a propriedade da TextBox Senha e Repita a Senha para:
Campo Propriedade Para Valor
Senha PasswordChar Para ●
Repita a Senha PasswordChar Para ●
Insira no ComboBox Nível de Acesso os componentes a Seguir(Edit Items):
Administrador e Operador. Lembrando que a primeira linha é vazia e cada palavra em
uma linha.
Mude a propriedade DropDownStyle para DropDownList;
Desabilite o campo Código, Data do Cadastro e Cadastrado por, pela propriedade
Enable = false;
nstutoriais.blogspot.com Página 31
Clique duas vezes no botão Salvar.
Observe que ele esta preenchido, então iremos trabalhar com ele as regras de negocio.
Quais?
Os campos que são obrigatório
Nível de Acesso e as mensagem de cadastro com sucesso, não foi possível o cadastro.
Copie o Código a Seguir:
try
{
//Se os campos estiver preenchido faça
if ((usuarioTextBox.Text != "") &&
(nivelAcessoComboBox.Text != "") && (senhaTextBox.Text != "") &&
(repitaSenhaTextBox.Text != ""))
{
//Se as senhas forem igual faça
if (senhaTextBox.Text == repitaSenhaTextBox.Text)
{
//Mostrar a Data do Cadastro na Hora
if (dataDiaTextBox.Text == "")
{
dataDiaTextBox.Text =
DateTime.Now.ToString();
}
//Mostrar quem Cadastrou o usuario
if (cadastradorPorTextBox.Text == "")
{
cadastradorPorTextBox.Text =
frmLogin.usuarioConectado;
}
//Executar a aplicação
this.Validate();
this.tbUsuarioBindingSource.EndEdit();
MessageBox.show("Cadastrado realizado com
sucesso")
this.tbUsuarioTableAdapter.Update(this.servicoDataSet.tbUsuario);
}
else
{
//Caso as senhas são diferentes
MessageBox.Show("As senhas estão diferentes");
}
}
else
{
//Ser os campos não estiverem preenchido
MessageBox.Show("Todos os campos não podem ficar
vazio");
}
}
catch (Exception ex)
{
//Caso haja uma exceção será tratada neste código
MessageBox.Show("Não foi possível salvar pelo seguinte
nstutoriais.blogspot.com Página 32
motivo: " + ex.Message);
}
Adicione este método para limpar o formulário:
private void LimparCampo()
{
idUsuarioTextBox.Clear();
usuarioTextBox.Clear();
senhaTextBox.Clear();
repitaSenhaTextBox.Clear();
nivelAcessoComboBox.SelectedIndex = -1;
dataDiaTextBox.Clear();
cadastradorPorTextBox.Clear();
}
Clique uma vez no DataGrid Usuario em Events > MouseDoubleClick
LimparCampo();
idUsuarioTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[0].Value.ToString();
usuarioTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[1].Value.ToString();
senhaTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[2].Value.ToString();
repitaSenhaTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[3].Value.ToString();
nivelAcessoComboBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[4].Value.ToString();
dataDiaTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[5].Value.ToString();
cadastradorPorTextBox.Text =
tbUsuarioDataGridView.CurrentRow.Cells[6].Value.ToString();
Termina o Cadastro de Usuário
7. Tela de Serviço
Mude as propriedades do formulário a seguir:
Propriedades Valores
Icon Selecione o ícone da Aplicação
Size 732; 633
StartPosition CenterScreen
Text Cadastro de Serviço
Arraste uma GroupBox dê o nome de Cadastro de Serviço.
Mude as propriedades a seguir:
Propriedades Valores
Archor Top, Left, Right
Size 600; 633
Text Dados do Serviço
Location 27; 23
nstutoriais.blogspot.com Página 33
Arraste as colunas da tabela para dentro da GroupBox e organize da sua forma.
Selecione um Campo de cada vez:
Descrição e Observação mudem as propriedades a seguir
Propriedades Valores
Location Descrição: 16; 71 | Observação: 16;
155
MultiLine True
ScrollBars Vertical
Size 523; 65
Código, Data do Cadastro e Cadastrado Por, desabilite a propriedade Enable.
O layout ficou assim:
Arraste uma GroupBox e adicione os campos a seguir:
Label Text = Filtrar Por
ComboBox Edit Items: Código, Nome e name = cbmFiltrar
Label Text = “=”
TextBox Name = txtPesquisar
Botão Name = btnPesquisar , Text = Pesquisar
nstutoriais.blogspot.com Página 34
O Layout ficou assim:
Adicione uma groupBox(Text = Serviço) e arraste da paleta Data Sources a tabela
tbServico. Faça como a imagem solicitar.
nstutoriais.blogspot.com Página 35
Desabilite a Enable Adding, Enable Editing e Enable Deleting. Clique em Edit Columns
renomei a propriedade HeaderText de cada campo como preferir. Segue uma sugestão:
nstutoriais.blogspot.com Página 36
O Layout ficou assim:
Volte para o código e insira o namespace a seguir:
using System.Data.SqlClient;
Embaixo do trecho de código public frmServico() adicione o código a seguir
SqlConnection cn = new
SqlConnection(Properties.Settings.Default.ServicoConnectionString);
SqlCommand cmd = null;
nstutoriais.blogspot.com Página 37
Como na imagem:
Volte para o Design(F7), clique duas vezes no botão Pesquisar e insira o código a
seguir:
try
{
if (cbmFiltrar.Text == "Código")
{
//Define a instrução Sql
string sql = "SELECT * FROM tbServico WHERE
idServico =" + txtPesquisar.Text + "";
//Lê os dados da variavel sql e conectar no cn
cmd = new SqlCommand(sql, cn);
//Abre conexão
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexão de banco de dados
que são usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memória.
DataTable servico = new DataTable();
/* Adiciona ou atualiza linhas em um DataTable
para que correspondam na fonte de
* dados usando o DataTable.*/
da.Fill(servico);
/*A tbUsuarioDataGridView recebe o DataTable
usuario*/
tbServicoDataGridView.DataSource = servico;
}
if (cbmFiltrar.Text == "Nome")
{
//define a instrução SQL
string sql = "SELECT * FROM tbServico WHERE nome
nstutoriais.blogspot.com Página 38
LIKE '%" + txtPesquisar.Text + "%'";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable servico = new DataTable();
da.Fill(servico);
tbServicoDataGridView.DataSource = servico;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}
Clique duas vezes no botão Adicionar Registro e insira o código a seguir:
//Desabilita o botão excluir para quem tiver nivel de acesso Operador
if (frmLogin.NivelAcesso == "")
{
bindingNavigatorDeleteItem.Enabled = false;
}
Volte para o Design(F7) clique duas vezes no botão salvar e digite o código a seguir:
try
{
//Desabilita o botão excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "")
{
bindingNavigatorDeleteItem.Enabled = false;
}
//Se os campos estiver preenchido faça
if (nomeTextBox.Text != "")
{
//Mostrar a Data do Cadastro na Hora
if (dataDiaTextBox.Text == "")
{
dataDiaTextBox.Text =
DateTime.Now.ToString();
}
//Mostrar quem Cadastrou o usuario
if (cadastradoPorTextBox.Text == "")
{
cadastradoPorTextBox.Text =
frmLogin.usuarioConectado;
}
//Executar a aplicação
this.Validate();
this.tbServicoBindingSource.EndEdit();
this.tbServicoTableAdapter.Update(this.servicoDataSet.tbServico);
MessageBox.Show("Cadastrado realizado com sucesso");
nstutoriais.blogspot.com Página 39
}
else
{
//Ser os campos não estiverem preenchido
MessageBox.Show("O Campo nome não pode ficar
vazio");
}
}
catch (Exception ex)
{
//Caso haja uma exceção será tratada neste código
MessageBox.Show("Não foi possível salvar pelo seguinte
motivo: " + ex.Message);
}
Adicionar o método para limpar o formulário:
private void LimparCampo()
{
idServicoTextBox.Clear();
nomeTextBox.Clear();
descricaoTextBox.Clear();
valorTextBox.Clear();
dataDiaTextBox.Clear();
cadastradoPorTextBox.Clear();
}
Insira o código para preenche um formulário através de uma DataGrid. Clique uma vez
na DataGrid tbServicoDataGridView em Events > MouseDoubleClick
LimparCampo();
idServicoTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[0].Value.ToString();
nomeTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[1].Value.ToString();
descricaoTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[2].Value.ToString();
observacaoTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[3].Value.ToString();
valorTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[4].Value.ToString();
dataDiaTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[5].Value.ToString();
cadastradoPorTextBox.Text =
tbServicoDataGridView.CurrentRow.Cells[6].Value.ToString();
Termina a Tela de Serviço:
nstutoriais.blogspot.com Página 40
8. Tela de Cliente
Mude as propriedades a Seguir:
Propriedades Valores
Icon Selecione o Ícone
Size 959; 597
StartPosition CenterScreen
Text Cadastro de Cliente
Arraste uma GroupBox e adicione os valores nas propriedades:
Propriedades Valores
Location 12; 35
Size 422; 235
Text Dados Pessoais
Na Data Source mude os tipos de Dados(Ex. TextBox, ComboBox) do campo CPF e
telefone para MaskTextBox e Estado para ComboBox. Arraste para a GroupBox.
Adicione uma groupBox para Pesquisar o Cliente e mude as propriedades a seguir:
Propriedades Valores
Location 440; 35
Size 496; 69
Text Pesquisar Cliente
Adicione os seguintes componentes para dentro da GroupBox:
Label Text = Filtrar Por
ComboBox Edit Items: Código, Nome e name = cbmFiltrar
Label Text = “=”
MaskTextBox Name = txtPesquisar
Botão Name = btnPesquisar , Text = Pesquisar
Arraste uma GroupBox e adicione os valores nas propriedades:
Propriedades Valores
Location 440; 110
Size 499; 441
Text Cliente(s)
Desabilite o Código, Data de Cadastro, Cadastrado por pela propriedade Enable;
nstutoriais.blogspot.com Página 41
Na Paleta Data Sources > Arraste a tabela tbCliente para dentro da GroupBox, clique na
seta ao lado, clique Dock in parent container. Desabilite a Enable Adding, Enable
Editing e Enable Deleting e por fim clique em Edit Columns. Mude os nomes de acordo
com a figura a seguir:
Arraste uma GroupBox e adicione os valores nas propriedades:
Propriedades Valores
Location 12; 276
Size 422; 272
Text Serviço(s) Prestados:
nstutoriais.blogspot.com Página 42
Na Paleta Data Sources > Arraste a tabela tbOrdemServico para dentro da GroupBox,
clique na seta ao lado, clique Dock in parent container e por fim Edit Columns. Exclua a
coluna idCliente. Mude os nomes das colunas de acordo com a figura a seguir:
O Layout deverá ficar assim:
nstutoriais.blogspot.com Página 43
Volte para o Design(F7) e adicione o namespace e duas variáveis a seguir.
Volte para o Design(F7) e clique duas vezes no botão Pesquisar. Adicione o código a
seguir:
try
{
if (cbmFiltrar.Text == "Código")
{
//Define a instrução Sql
string sql = "SELECT * FROM tbCliente WHERE
idCliente =" + txtPesquisar.Text + "";
//Lê os dados da variavel sql e conectar no cn
cmd = new SqlCommand(sql, cn);
//Abre conexão
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexão de banco de dados
que são usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memória.
DataTable cliente = new DataTable();
/* Adiciona ou atualiza linhas em um DataTable
para que correspondam na fonte de
* dados usando o DataTable.*/
da.Fill(cliente);
/*A tbUsuarioDataGridView recebe o DataTable
usuario*/
tbClienteDataGridView.DataSource = cliente;
//Fechar a conexão
}
if (cbmFiltrar.Text == "Nome")
{
//define a instrução SQL
string sql = "SELECT * FROM tbCliente WHERE nome
LIKE '%" + txtPesquisar.Text + "%'";
cmd = new SqlCommand(sql, cn);
cn.Open();
nstutoriais.blogspot.com Página 44
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable cliente = new DataTable();
da.Fill(cliente);
tbClienteDataGridView.DataSource = cliente;
}
if (cbmFiltrar.Text == "CPF")
{
//define a instrução SQL
string sql = "SELECT * FROM tbCliente WHERE cpf
='" + txtPesquisar.Text + "'";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable cliente = new DataTable();
da.Fill(cliente);
tbClienteDataGridView.DataSource = cliente;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}
Volte para o Design(F7) clique uma vez no comboBox Filtrar entre no event e clique
duas vezes na propriedade SelectedIndexChanged e insira o código a seguir:
if (cbmFiltrar.Text == "Código")
{
txtPesquisar.Mask = "";
}
if (cbmFiltrar.Text == "Nome")
{
txtPesquisar.Mask = "";
}
if (cbmFiltrar.Text == "CPF")
{
txtPesquisar.Mask = "000,000,000-00";
}
if (cbmFiltrar.Text == "")
{
txtPesquisar.Mask = "";
}
nstutoriais.blogspot.com Página 45
Arraste o Componente Timer para o formulário e nas propriedades mude o seguinte:
Enable para True
Interval para 32
No event,Clique Duas vezes no Tick e insira o código abaixo:
try
{
//define a instrução SQL
string sql = "SELECT * FROM tbOrdemServico WHERE
idCliente ='" + idClienteTextBox.Text + "'";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable os = new DataTable();
da.Fill(os);
tbOrdemServicoDataGridView.DataSource = os;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}
Clique Duas vezes no botão Adicionar Registro e insira o código abaixo:
//Desabilita o botão excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}
Adicione o método a seguir depois do trecho de código do botão Adicionar Registro
public static bool ValidarCPF(string cpf)
{
// Caso coloque todos os numeros iguais
int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4,
3, 2 };
int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6,
5, 4, 3, 2 };
string tempCpf;
string digito;
int soma;
int resto;
cpf = cpf.Trim();
cpf = cpf.Replace(".", "").Replace("-", "");
if (cpf.Length != 11)
{
return false;
}
tempCpf = cpf.Substring(0, 9);
soma = 0;
for (int i = 0; i < 9; i++)
nstutoriais.blogspot.com Página 46
{
soma += int.Parse(tempCpf[i].ToString()) *
multiplicador1[i];
}
resto = soma % 11;
if (resto < 2)
{
resto = 0;
}
else
{
resto = 11 - resto;
}
digito = resto.ToString();
tempCpf = tempCpf + digito;
soma = 0;
for (int i = 0; i < 10; i++)
{
soma += int.Parse(tempCpf[i].ToString()) *
multiplicador2[i];
}
resto = soma % 11;
if (resto < 2)
{
resto = 0;
}
else
{
resto = 11 - resto;
}
digito = digito + resto.ToString();
return cpf.EndsWith(digito);
}
Clique duas vezes no botão Salvar e insira o código abaixo:
try
{
//Desabilita o botão excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}
if ((nomeTextBox.Text != "") && (cpfMaskedTextBox.Text
!= ""))
{
//Insere a Data
if (dataDiaTextBox.Text == "")
{
dataDiaTextBox.Text = DateTime.Now.ToString();
}
//Mostrar o usuário que cadastrou
if (cadastradoPorTextBox.Text == "")
{
nstutoriais.blogspot.com Página 47
cadastradoPorTextBox.Text =
frmLogin.usuarioConectado;
}
//Verificar o cpf
if (ValidarCPF(cpfMaskedTextBox.Text))
{
this.Validate();
this.tbClienteBindingSource.EndEdit();
this.tbClienteTableAdapter.Update(this.servicoDataSet.tbCliente);
}
else
{
MessageBox.Show("CPF incorreto",
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("O Campo 'Nome' e 'CPF não podem
ficar vazio",
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível salvar pelo seguinte
motivo: " + ex.Message);
}
Adicione este método para limpar o formulário:
private void LimparCampo()
{
idClienteTextBox.Clear();
nomeTextBox.Clear();
cpfMaskedTextBox.Clear();
telefoneMaskedTextBox.Clear();
enderecoTextBox.Clear();
bairroTextBox.Clear();
cidadeTextBox.Clear();
estadoComboBox.SelectedIndex = -1;
dataDiaTextBox.Clear();
cadastradoPorTextBox.Clear();
}
Clique uma vez no DataGrid do Cliente > Events> MouseDoubleClick e adicione o
código a seguir: Para preenche um formulário através do DataGrid
LimparCampo();
idClienteTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[0].Value.ToString();
nomeTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[1].Value.ToString();
cpfMaskedTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[2].Value.ToString();
telefoneMaskedTextBox.Text =
nstutoriais.blogspot.com Página 48
tbClienteDataGridView.CurrentRow.Cells[3].Value.ToString();
enderecoTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[4].Value.ToString();
bairroTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[5].Value.ToString();
cidadeTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[6].Value.ToString();
estadoComboBox.Text =
tbClienteDataGridView.CurrentRow.Cells[7].Value.ToString();
dataDiaTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[8].Value.ToString();
cadastradoPorTextBox.Text =
tbClienteDataGridView.CurrentRow.Cells[9].Value.ToString();
Pronto a Tela de Cliente esta pronta.
9. Tela Ordem de Serviço
Modifique os componentes a seguir do formulário Ordem de Serviço:
Propriedades Valores
Size 505; 630
StartPosition CenterScreen
Text Cadastrar OS
Insira uma groupBox e mude as propriedades a seguir:
Propriedades Valores
Location 12; 27
Size 470; 228
Text Dados OS
Mude na Paleta Data Sources os tipos de campo de idCliente e idServico para
ComboBox., arraste e organize de acordo com o seu jeito. Podendo seguir Como na
imagem:
nstutoriais.blogspot.com Página 49
Adicione os seguintes componentes para dentro da GroupBox:
Label Text = Filtrar Por
ComboBox Edit Items: Código, Nome e name = cbmFiltrar
Label Text = “=”
TextBox Name = txtPesquisar
Botão Name = btnPesquisar , Text = Pesquisar
Adicione uma groupBox e dentro dela acrescente a tabela tbOrdemServico. Clique na
seta ao lado e desmarque as opções a Enable Adding, Enable Editing, Enable Deleting,
clique em Dock in parente containers e EditColumns:
Modifique os nomes de cada coluna a seu gosto:
Clique na comboBox Nome do Cliente na seta :
Em Data Sources: Escolha a tabela tbCliente
Em Member Value: Escolha a coluna idCliente
Em Value Member: Escolha a coluna idNome
Em Selected Value: Em tbOrdemServicoBindingSource > idCliente
Faça isso com a comboBox Nome do Serviço.
Clique duas vezes no botão pesquisar e insira o código a seguir:
try
{
if (cbmFiltrar.Text == "Código OS")
{
//Define a instrução Sql
string sql = "SELECT * FROM tbOrdemServico WHERE
idOrdem =" + txtPesquisar.Text + "";
//Lê os dados da variavel sql e conectar no cn
cmd = new SqlCommand(sql, cn);
//Abre conexão
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexão de banco de dados
que são usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
nstutoriais.blogspot.com Página 50
//Representa uma tabela de dados na memória.
DataTable os = new DataTable();
/* Adiciona ou atualiza linhas em um DataTable
para que correspondam na fonte de
* dados usando o DataTable.*/
da.Fill(os);
/*A tbUsuarioDataGridView recebe o DataTable
usuario*/
tbOrdemServicoDataGridView.DataSource = os;
//Fechar a conexão
}
if (cbmFiltrar.Text == "Código Cliente")
{
//define a instrução SQL
string sql = "SELECT * FROM tbOrdemServico WHERE
idCliente =" + txtPesquisar.Text + "";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable os = new DataTable();
da.Fill(os);
tbOrdemServicoDataGridView.DataSource = os;
}
if (cbmFiltrar.Text == "Código Serviço")
{
//define a instrução SQL
string sql = "SELECT * FROM tbOrdemServico WHERE
idServico=" + txtPesquisar.Text + "";
cmd = new SqlCommand(sql, cn);
cn.Open();
cmd.CommandType = CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable os = new DataTable();
da.Fill(os);
tbOrdemServicoDataGridView.DataSource = os;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}
nstutoriais.blogspot.com Página 51
Desabilite o campo Código OS, Data do Cadastro e Cadastrado Por, pela propriedade
Enable.
Clique Duas vezes no botão Adicionar Registro e insira o código abaixo:
//Desabilita o botão excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}
Clique duas Vezes no botão Salvar e digite o Código a seguir:
try
{
//Desabilita o botão excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}
if ((idClienteComboBox.Text != "") && (idServicoComboBox.Text != ""))
{
if (dataDiaTextBox.Text == "")
{
dataDiaTextBox.Text = DateTime.Now.ToString();
}
if (cadastradorPorTextBox.Text == "")
{
cadastradorPorTextBox.Text =
frmLogin.usuarioConectado;
}
this.Validate();
this.tbOrdemServicoBindingSource.EndEdit();
this.tbOrdemServicoTableAdapter.Update(this.servicoDataSet.tbOrdemServ
ico);
MessageBox.Show("Cadastro realizado com sucesso");
}
else
{
MessageBox.Show("Todos os campos são obrigatorio");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}
nstutoriais.blogspot.com Página 52
Seu Layout poderá ter ficado da seguinte forma:
Insira o método para limpar o formulário:
private void LimparCampo()
{
idOrdemTextBox.Clear();
idClienteComboBox.SelectedIndex = -1;
idServicoComboBox.SelectedIndex = -1;
dataDiaTextBox.Clear();
cadastradorPorTextBox.Clear();
}
Adicione o Código para puxar os dados de uma DataGrid para o formulário:
LimparCampo();
idOrdemTextBox.Text =
tbOrdemServicoDataGridView.CurrentRow.Cells[0].Value.ToString();
idClienteComboBox.Text =
tbOrdemServicoDataGridView.CurrentRow.Cells[1].Value.ToString();
idServicoComboBox.Text =
tbOrdemServicoDataGridView.CurrentRow.Cells[2].Value.ToString();
dataDiaTextBox.Text =
tbOrdemServicoDataGridView.CurrentRow.Cells[3].Value.ToString();
cadastradorPorTextBox.Text =
tbOrdemServicoDataGridView.CurrentRow.Cells[4].Value.ToString();
Pronto o Cadastrar OS está pronto na próxima Parte será criado a Tela Principal.
nstutoriais.blogspot.com Página 53
10. Tela Principal
Modifique as propriedades a seguir:
Propriedades Valores
BackgroundImage Escolha uma imagem de Plano de Fundo
IsMdiContainer True
Size 1024; 785
StartPosition CenterScreen
Text Tela Principal
Adicione ToolBox >Menu & Toolbars > MenuStrip. Como na imagem:
Crie um sub Menu para o Cadastro como na imagem:
nstutoriais.blogspot.com Página 54
Ao lado do Menu Cadastro existe um Texto chamado de Type Here clique nele e
adicione o menu e o sub Menu como na imagem abaixo:
Adicione o componente chamado ToolBox > ToolStrip. Como na imagem:
Clique na Seta para baixo e adicione 4 Button chamado de:
Por enquando o ToolStrip devera ficar assim:
Name Padrão Modificar
name Para
DisplayStyle TextImageRelation Text
toolStripButton1 tsbCliente Image and
Text
ImageAboveText Cliente
toolStripButton2 tsbServico Image and
Text
ImageAboveText Serviço
toolStripButton3 tsbOS Image and
Text
ImageAboveText Ordem de Serviço
toolStripButton4 tsbLogoff Image and
Text
ImageAboveText Logoff
Adicione as imagens de cada botão pela propriedade Image:
O Seu ToolStrip poderá ter ficado assim:
nstutoriais.blogspot.com Página 55
Caso as imagens estiverem pequenas desative(none) a propriedade ImageScaling.
Atenção: Essa propriedade desativar o tamanho padrão das imagens ser você colocar
uma imagem com resolução muito grande ira ficar feio, portanto coloque resolução de
ate 32x32 no seu projeto.
Arraste o componente chamado ToolBox>StatusStrip. Como na imagem:
Clique na seta para baixo e adicione 5 StatusLabel com as propriedades a seguir
Name Padrão Modificar name
Para
BorderSides Text
toolStripStatusLabel1 tsslUsuario Right Vazio
toolStripStatusLabel2 tsslIP Right Vazio
toolStripStatusLabel3 tsslNomePC Right Vazio
toolStripStatusLabel4 tsslData Right Vazio
toolStripStatusLabel5 tsslHora Right Vazio
O StatusStrip ficara assim:
Clique duas vezes no formulário para abrir o event Load e insira o código a seguir:
//Nível de Acesso: Ser o usuario for Operador o formulario estara
invisivel
if (frmLogin.NivelAcesso == "Operador")
{
//Nível de Operador não podera cadastrar usuário
usuárioToolStripMenuItem.Visible = false;
}
nstutoriais.blogspot.com Página 56
//Mostrar o usuário conectado
tsslUsuario.Text = "Usuário: " +
frmLogin.usuarioConectado;
//Mostra o nome do PC
string myHost = System.Net.Dns.GetHostName();
tsslNomePC.Text = "Nome do PC: " + myHost;
//Mostrar o IP do usuário
System.Net.IPHostEntry myIPs =
System.Net.Dns.GetHostEntry(myHost);
foreach (System.Net.IPAddress myIP in myIPs.AddressList)
{
//Mostar o IP
tsslIP.Text = "IP: " + myIP;
}
Insira o Componente Timer modifique as propriedades (Enable para True e Interval para
1000) e clique duas vezes nele e adicione o trecho de código a seguir:
//Mostrar a Hora
tsslData.Text = DateTime.Now.ToString("HH:mm");
Clique duas vezes no menu Cadastro> Usuário e insira o código abaixo:
try
{
formulario.frmUsuario usuario = null; // form a ser
aberto
//procura form na relação de forms filhos
foreach (Form frm in this.MdiChildren)
{
//se encontrou inicializa instancia de frmUsuario
com o form ja aberto
if (frm is formulario.frmUsuario)
{
usuario = (formulario.frmUsuario)frm;
break;
}
}
// se não encontrou na relação, instancia objeto,
"seta" form pai e exibe form
if (usuario == null)
{
usuario = new formulario.frmUsuario();
usuario.MdiParent = this;
usuario.Show();
}
//garante que ele fique em foco caso haja outros forms
abertos
usuario.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
nstutoriais.blogspot.com Página 57
}
Clique duas vezes no menu Cadastro > Cliente e insira o Código a seguir:
try
{
frmCliente cliente = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmCliente)
{
cliente = (frmCliente)frm;
break;
}
}
if (cliente == null)
{
cliente = new frmCliente();
cliente.MdiParent = this;
cliente.Show();
}
cliente.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Clique duas vezes no menu Cadastro> Serviço e adicione o Código a seguir:
try
{
formulario.frmServico servico = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is formulario.frmServico)
{
servico = (formulario.frmServico)frm;
break;
}
}
if (servico == null)
{
servico = new formulario.frmServico();
servico.MdiParent = this;
servico.Show();
}
servico.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
nstutoriais.blogspot.com Página 58
}
Clique duas vezes no menu Cadastro > Ordem de Serviço e adicione o código a seguir:
try
{
frmOS os = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmOS)
{
os = (frmOS)frm;
break;
}
}
if (os == null)
{
os = new frmOS();
os.MdiParent = this;
os.Show();
}
os.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Clique duas vezes no menu Relatório > Cliente e adicione o código a seguir:
try
{
frmRelCliente relcliente = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmRelCliente)
{
relcliente = (frmRelCliente)frm;
break;
}
}
if (relcliente == null)
{
relcliente = new frmRelCliente();
relcliente.MdiParent = this;
relcliente.Show();
}
relcliente.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
nstutoriais.blogspot.com Página 59
}
Clique duas vezes no menu Relatório > Serviço e adicione o código a seguir:
try
{
frmRelServico relServico = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmRelServico)
{
relServico = (frmRelServico)frm;
break;
}
}
if (relServico == null)
{
relServico = new frmRelServico();
relServico.MdiParent = this;
relServico.Show();
}
relServico.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Clique duas vezes no menu Relatório > Ordem de Serviço e adicione o código a seguir:
try
{
frmRelOS relOS = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmRelOS)
{
relOS = (frmRelOS)frm;
break;
}
}
if (relOS == null)
{
relOS = new frmRelOS();
relOS.MdiParent = this;
relOS.Show();
}
relOS.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
nstutoriais.blogspot.com Página 60
}
Clique duas vezes no toolStrip1 > Cliente e insira o Código:
try
{
frmCliente cliente = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmCliente)
{
cliente = (frmCliente)frm;
break;
}
}
if (cliente == null)
{
cliente = new frmCliente();
cliente.MdiParent = this;
cliente.Show();
}
cliente.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Clique duas vezes no toolStrip1 > Serviço e insira o Código:
try
{
formulario.frmServico servico = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is formulario.frmServico)
{
servico = (formulario.frmServico)frm;
break;
}
}
if (servico == null)
{
servico = new formulario.frmServico();
servico.MdiParent = this;
servico.Show();
}
servico.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
nstutoriais.blogspot.com Página 61
}
Clique duas vezes no toolStrip1 > Ordem de Serviço e insira o Código:
try
{
frmOS os = null;
foreach (Form frm in this.MdiChildren)
{
if (frm is frmOS)
{
os = (frmOS)frm;
break;
}
}
if (os == null)
{
os = new frmOS();
os.MdiParent = this;
os.Show();
}
os.Focus();
}
catch (Exception ex)
{
MessageBox.Show("Não foi possível ser conectar ao
formulário devido ao erro: " + ex.Message,
"Aviso",–
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
Clique duas vezes no menu Cadastro > Sair e adicione o código a seguir:
Application.Exit();
Entre no event do Formulario Tela Principal e clique na propriedade FormClosed e
adicione o código a seguir:
Application.Exit();
nstutoriais.blogspot.com Página 62
Relatório
11. Relatório Cliente
Entre no frmRelCliente modifique as propriedades a seguir:
Propriedades Valores
Size 615; 407
StartPosition CenterScreen
Text Relatório de Cliente
Adicione o componente pela ToolBox > Data > ReportView como na imagem:
nstutoriais.blogspot.com Página 63
O Relatório esta em branco vamos adicionar um campo do tipo Tabela que mostrara
todos os Clientes cadastrados no Sistema.
Clique em cima do relatório > Menu Report > Marque Page Header(Cabeçalho) e Page
Footer(Rodapé) . Como na imagem:
nstutoriais.blogspot.com Página 64
Arraste do ToolBox o componente Table e insira na Body do Relatório. Como na
imagem:
Insira as colunas do Data Sources em Detail. Obseve que ele colocar as labels
correspondente em Header. Como na imagem:
nstutoriais.blogspot.com Página 65
Faça isso com os campos que irão para o relatório. Para adicionar uma coluna clique na
primeira linha e com o botão direito > Insert Column to the Left(Esquerda) ou
Right(Direita).
nstutoriais.blogspot.com Página 66
O layout ficou assim:
Em Page Header Adicione uma TextBox e coloque o Texto : Cadastro de Cliente. Mude
o tamanho do texto, a cor do texto e do fundo pela barra de ferramentas.
O Relatório esta pronto. Volte para o frmRelCliente, clique no ReportView na seta e
selecione Repot1.rdlc Faça como a imagem a seguir:
nstutoriais.blogspot.com Página 67
Faça isso com o Relatório Serviço e Relatório Ordem de Serviço
12. Relatório Serviço
Siga o Passo Número 12.
13. Relatório Ordem de Serviço
Siga o Passo Número 12.
Sistema desenvolvido por Natanael Santos.
259.natanael@gmail.com

Mais conteúdo relacionado

Mais procurados

Mais procurados (9)

Daw slide 08
Daw slide 08Daw slide 08
Daw slide 08
 
Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04Curso de Ruby on Rails - Aula 04
Curso de Ruby on Rails - Aula 04
 
ORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernateORM: Sendo produtivo com NHibernate
ORM: Sendo produtivo com NHibernate
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Angular JS - Fundamentos
Angular JS - FundamentosAngular JS - Fundamentos
Angular JS - Fundamentos
 
Simulador de processo logístico - Promodel
Simulador de processo logístico - PromodelSimulador de processo logístico - Promodel
Simulador de processo logístico - Promodel
 
JQuery
JQuery JQuery
JQuery
 
Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4Cafe com Tom - ExtJS 4
Cafe com Tom - ExtJS 4
 
Testes automatizados
Testes automatizadosTestes automatizados
Testes automatizados
 

Semelhante a Sistema de Ordem de Serviço C# SQL

Apostila de Crystal Report
Apostila de Crystal ReportApostila de Crystal Report
Apostila de Crystal ReportAndre Nascimento
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012Rodrigo Ribeiro
 
Cadastro de clientes em c#
Cadastro de clientes em c#Cadastro de clientes em c#
Cadastro de clientes em c#André Luiz
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Osny Pereira Filho
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphihildebertomelo
 
Aula 03 banco de dados em asp.net (cadastrar)
Aula 03   banco de dados em asp.net (cadastrar)Aula 03   banco de dados em asp.net (cadastrar)
Aula 03 banco de dados em asp.net (cadastrar)Gabriel Bugano
 
Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2Natanael Simões
 
Aula 06 banco de dados em asp.net (lado cliente)
Aula 06   banco de dados em asp.net (lado cliente)Aula 06   banco de dados em asp.net (lado cliente)
Aula 06 banco de dados em asp.net (lado cliente)Gabriel Bugano
 
Passo a-passo-pedidos
Passo a-passo-pedidosPasso a-passo-pedidos
Passo a-passo-pedidosDiego Alves
 
SICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoSICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoRenzo Petri
 
Servicenow reports
Servicenow reportsServicenow reports
Servicenow reportsTiago Macul
 
Aula 04 banco de dados em asp.net (site do administrador)
Aula 04   banco de dados em asp.net (site do administrador)Aula 04   banco de dados em asp.net (site do administrador)
Aula 04 banco de dados em asp.net (site do administrador)Gabriel Bugano
 
Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgridmarcos0512
 
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucessoGUTS-RS
 

Semelhante a Sistema de Ordem de Serviço C# SQL (20)

Apostila de Crystal Report
Apostila de Crystal ReportApostila de Crystal Report
Apostila de Crystal Report
 
Vba cadastro de clientes
Vba   cadastro de clientesVba   cadastro de clientes
Vba cadastro de clientes
 
T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012T-SQL na prática com SQL SERVER Express 2012
T-SQL na prática com SQL SERVER Express 2012
 
Cadastro de clientes em c#
Cadastro de clientes em c#Cadastro de clientes em c#
Cadastro de clientes em c#
 
Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01Express2012simples 130312140529-phpapp01
Express2012simples 130312140529-phpapp01
 
Desenvolvimento Delphi
Desenvolvimento DelphiDesenvolvimento Delphi
Desenvolvimento Delphi
 
Aula 03 banco de dados em asp.net (cadastrar)
Aula 03   banco de dados em asp.net (cadastrar)Aula 03   banco de dados em asp.net (cadastrar)
Aula 03 banco de dados em asp.net (cadastrar)
 
Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2Projeto de sistemas com UML - Parte 2
Projeto de sistemas com UML - Parte 2
 
Aula 06 banco de dados em asp.net (lado cliente)
Aula 06   banco de dados em asp.net (lado cliente)Aula 06   banco de dados em asp.net (lado cliente)
Aula 06 banco de dados em asp.net (lado cliente)
 
Passo a-passo-pedidos
Passo a-passo-pedidosPasso a-passo-pedidos
Passo a-passo-pedidos
 
SICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle JurídicoSICJUR - Sistema de Controle Jurídico
SICJUR - Sistema de Controle Jurídico
 
Entrega Contínua - do Zero ao Sucesso
Entrega Contínua - do Zero ao SucessoEntrega Contínua - do Zero ao Sucesso
Entrega Contínua - do Zero ao Sucesso
 
Vb
VbVb
Vb
 
Servicenow reports
Servicenow reportsServicenow reports
Servicenow reports
 
Aula 04 banco de dados em asp.net (site do administrador)
Aula 04   banco de dados em asp.net (site do administrador)Aula 04   banco de dados em asp.net (site do administrador)
Aula 04 banco de dados em asp.net (site do administrador)
 
Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgrid
 
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso[GUTS-RS] Evento Outubro 2017 - Entrega contínua  do zero ao sucesso
[GUTS-RS] Evento Outubro 2017 - Entrega contínua do zero ao sucesso
 
Manual CPlus
Manual CPlusManual CPlus
Manual CPlus
 
Projeto locadora
Projeto locadoraProjeto locadora
Projeto locadora
 
Bd aula5
Bd aula5Bd aula5
Bd aula5
 

Sistema de Ordem de Serviço C# SQL

  • 1. NS TUTORIAIS Desenvolvendo Sistema de Ordem de Serviço em C# utilizando o Banco de Dados SQL Server Tutorial Natanael Santos 9/2/2011 Sistema desenvolvido para o Tutorial Desenvolvendo um Sistema de Ordem de Serviço com Tela de Login, Tela de Splash, Cadastro de Cliente, Cadastro de Serviço, Controle de Acesso, Ordem de Serviço e Relatórios.
  • 2. Sumário Introdução......................................................................................................................... 2 1.Criação do Banco de Dados........................................................................................... 3 2. Criando o Projeto.......................................................................................................... 5 3. Conexão com o Banco.................................................................................................. 6 4. Tela de Login.............................................................................................................. 13 5. Tela de Splash............................................................................................................ 21 6. Tela de Usuário.......................................................................................................... 24 7. Tela de Serviço.......................................................................................................... 32 8. Tela de Cliente........................................................................................................... 40 9. Tela Ordem de Serviço............................................................................................... 48 10. Tela Principal............................................................................................................ 53 11. Relatório Cliente....................................................................................................... 62 12. Relatório Serviço...................................................................................................... 67 13. Relatório Ordem de Serviço ..................................................................................... 67
  • 3. nstutoriais.blogspot.com Página 2 Introdução O Sistema de Ordem de Serviço foi desenvolvido pelo blog nstutoriais.blogspot.com para aprendizagem. O Sistema conta com uma Tela de Splash, Tela de Login, Tela Principal, Cadastro de Usuário, Cadastro de Cliente, Cadastro de Serviço, Ordem de Serviço, Relatório de Cliente,Serviço e Ordem de Serviço. O Sistema esta dividido em doze partes que seguem uma lógica. 1º Parte: Criação do Banco de Dados usando o SQL Server: Neste 1ª Parte é desenvolvido o banco de dados contendo três tabelas. 2ª Parte: Criando o Projeto: Utilizando o Visual Studio para desenvolver o Sistema. 3ª Parte: Conexão com o Banco de Dados: Nesta parte e feita à conexão com o banco de dados para o Sistema. 4º Parte: Tela de Login: Responsável por fazer o controle de usuário no formulário 5ª Parte: Tela de Splash: Responsável por carregar o sistema 6º Parte: Tela de Usuário: Responsável por inserir, excluir e atualizar os usuários do sistema. 7º Parte: Tela de Serviço: Responsável pelo Cadastro de Serviço. 8º Parte: Tela de Cliente: Responsável pelo Cadastro de Cliente. 9º Parte: Tela Ordem de Serviço: Responsável por Emitir a Ordem de Serviço. 10º Parte: Tela de Principal: Responsável por fazer a junção dos formulários. 11º Parte: Relatório Cliente: Responsável por mostrar todos os Clientes cadastrados no sistema 12º Parte: Relatório Serviço: Responsável por mostrar todos os Serviços cadastrados no sistema 13º Parte: Relatório Ordem de Serviço: Responsável por mostrar todas as Ordens de Serviço cadastradas no sistema
  • 4. nstutoriais.blogspot.com Página 3 1.Criação do Banco de Dados Entre no SQL Server e clique em New Query e adicione o código a Seguir: /*Cria o banco de dados*/ create database Servico /*Limpe a Query ou Instrução */ /*Coloca em uso o banco de dados Servico*/ use Servico /*Cria a tabela tbCliente*/ create table tbCliente ( idCliente int primary key not null, nome varchar(80) not null, cpf char(14) not null, telefone char(13), endereco varchar(max), bairro varchar(100), cidade varchar(100), estado varchar(100), dataDia varchar(50), cadastradoPor varchar(50) )
  • 5. nstutoriais.blogspot.com Página 4 /*Cria a tabela tbServico*/ create table tbServico ( idServico int primary key not null, nome varchar(80) not null, descricao varchar(max), observacao varchar(max), valor decimal(10,2), dataDia varchar(50), cadastradoPor varchar(50) ) /*Cria a tabela tbOrdemServico*/ create table tbOrdemServico ( idOrdem int primary key not null, idCliente int not null, idServico int not null, dataDia varchar(50), cadastradorPor varchar(50), /*Chave estrangeira idCliente*/ CONSTRAINT FK_tbOrdemServico_tbCliente_idCliente FOREIGN KEY(idCliente) REFERENCES tbCliente(idCliente), /*Chave estrangeira idServico*/ CONSTRAINT FK_tbOrdemServico_tbServico_idServico FOREIGN KEY(idServico) REFERENCES tbServico(idServico) ) /*Cria a tabela tbUsuario*/ create table tbUsuario( idUsuario int primary key not null, usuario varchar(50) not null, senha varchar(50) not null, repitaSenha varchar(50) not null, nivelAcesso varchar(50) not null, dataDia varchar(50), cadastradorPor varchar(50) )
  • 6. nstutoriais.blogspot.com Página 5 2. Criando o Projeto Crie o novo Projeto: Selecione o Visual C#> Windows > Windows Applications: Dê o nome de SISistema:
  • 7. nstutoriais.blogspot.com Página 6 3. Conexão com o Banco Selecione no menu Data > Add New Data Sources: Selecione Database:
  • 8. nstutoriais.blogspot.com Página 7 Selecione o botão Next: Clique no botão New Connection: Selecione Microsoft SQL Server Database File e depois Continue:
  • 9. nstutoriais.blogspot.com Página 8 Clique no botão Browse e Selecione o Banco de Dados e clique em Test Connection depois clique OK para sair da caixa de Diálogo e OK do Formulário Add Connection para ir ao próximo formulário: Atenção (Geralmente o endereço da pasta dos bancos de dados desenvolvido no SQL Server para Window XP é: C:Arquivos de programasMicrosoft SQL ServerMSSQL.1MSSQLData) Clique em Next novamente e irá aparecer a caixa de Dialogo clique em Sim: Para guardar o banco de dados no projeto.
  • 10. nstutoriais.blogspot.com Página 9 Marque a Tables para selecionar todas as tabelas e clique em Finish. A princípio não aconteceu nada. Clique no menu Data > Show Data Sources para aparecer as tabelas do Banco de Dados. Como na imagem:
  • 11. nstutoriais.blogspot.com Página 10 Precisamos colocar os campos “código” de cada tabela como auto incremento. Na Paleta Data Sources > pelo ícone Edit DataSet with Designer. Clique na tabela tbOrdemServico > idOrdem. Na propriedade mude os campos a seguir: Propriedades Valores AutoIncrement True AutoIncrementSeed 1 Clique na tabela tbServico > idServico. Na propriedade mude os campos a seguir: Propriedades Valores AutoIncrement True AutoIncrementSeed 1 Clique na tabela tbCliente > idCliente. Na propriedade mude os campos a seguir: Propriedades Valores AutoIncrement True AutoIncrementSeed 1 Clique na tabela tbUsuario > idUsuario. Na propriedade mude os campos a seguir: Propriedades Valores AutoIncrement True AutoIncrementSeed 1 Salve e volte para o form1.cs; Renomei o formulário form1.cs para frmLogin.cs;
  • 12. nstutoriais.blogspot.com Página 11 Neste momento crie os formulários que iremos usar e depois volte para a Tela de Login; Formulários Clique no Solution Explorer > SiServico > botão direito > Add > New Folder > dê o nome de Formulario: Clique no Solution Explorer > Formulário > botão direito > Add > Windows Form > dê o nome para cada formulário da seguinte forma:
  • 14. nstutoriais.blogspot.com Página 13 4. Tela de Login Clique no formulário frmLogin.cs e mude as propriedades a seguir: Propriedade Valores Name frmLogin FormBorderStyle FixedSingle Icon Selecione o icone MaximizeBox False MinimizeBox False Size 458; 229 StartPosition CenterScreen Text Tela de Login Clique na Paleta ToolBox > Common Controls > PictureBox e mude as propriedades a seguir: Propriedade Valores Name bannerTelaLogin Image Selecione a imagem Location 0;0 Size 458; 87 Devera ficar assim o bannerTelaLogin:
  • 15. nstutoriais.blogspot.com Página 14 Clique na paleta ToolBox > Containers> GroupBox e mude as propriedades: Propriedade Valor Location 37; 93 Size 377; 160 Text Insira o Login: Devera ficar assim: Na Paleta Data Sources(SHIFT + Alt + D) clique no sinal +: Observe que os campos estão com o tipo TextBox, precisamos mudar os campos usuário e nivelAcesso para ComboBox da seguinte forma: Selecione o campo usuário clique na seta para baixo e selecione ComboBox, faça isso com o campo nivelAcesso:
  • 16. nstutoriais.blogspot.com Página 15 Observe que mudou as imagens dos campos: Arraste os campos (usuário, nivelAcesso e senha) para a GroupBox e adicione dois botões embaixo deles: Observe que ele inseriu automaticamente uma barra e os componentes dela, remova todos. Mude os names dos botões para btnConectar e btnSair com os textos Conectar e Sair: A ComboBox usuário (usuarioComboBox) fica responsável por mostrar todos os usuários cadastrados no sistema para fazer isso segue o passo a passo:
  • 17. nstutoriais.blogspot.com Página 16 Clique apenas uma vez no campo > Clique na seta superior a direita que ira aparecer > Marque a opção “Use data bound items” como na imagem: Em Data Source > Selecione a tabela tbUsuario. Como na imagem:
  • 18. nstutoriais.blogspot.com Página 17 No Display Member > Selecione o que será visto pelo Usuário que é a coluna usuário. Como na imagem: No Value Display > Selecione a coluna que equivale ao Display Member. Como na imagem: Modifique as propriedades a seguir: Propriedades Valores AutoCompleteSOurce ListItems DropDownStyle DropDownList Size 121; 21
  • 19. nstutoriais.blogspot.com Página 18 Na ComboBox Nível de Acesso clique uma vez > Clique na seta > Edit Items > Deixe a primeira Linha vazia e digite Administrador e Operador em cada linha. Como na imagem: Modifique as propriedades da ComBoBox nivelAcesso a seguir: Propriedades Valores AutoCompleteSOurce ListItems DropDownStyle DropDownList Size 121; 21 Na TextBox Senha modifique as propriedades a seguir: Propriedades Valores PasswordChar ● Clique duas vezes no botão Sair e digite o código a seguir: Close(); //Para sair da aplicação
  • 20. nstutoriais.blogspot.com Página 19 No topo da pagina digite o namespace a seguir: using System.Data.SqlClient; //Classe Responsável pela Conexão com o SQL Server Declare duas variáveis depois do public partial class frmLogin : Form { //Responsavel pelo Nivel de Acesso public static string NivelAcesso; //Responsavel por mostrar quem esta conectado no sistema public static string usuarioConectado; Como na imagem: Volte para o Desing(F7), clique duas vezes no botão Conectar e digite o código: try { //Verificar ser os campos estão preenchidos if ((usuarioComboBox.Text != "") && (nivelAcessoComboBox.Text != "") && (senhaTextBox.Text != "")) { //Responsavel pelo Comando Sql SqlCommand comm = new SqlCommand("Select * From tbUsuario Where usuario = @usuario and " + "senha = @senha and nivelAcesso=@nivel", conn); //Parametizar os codigos comm.Parameters.Add("@usuario", SqlDbType.VarChar).Value = usuarioComboBox.Text; comm.Parameters.Add("@senha", SqlDbType.VarChar).Value = senhaTextBox.Text; comm.Parameters.Add("@nivel", SqlDbType.VarChar).Value = nivelAcessoComboBox.Text; //Abre a conexão conn.Open(); SqlDataReader reader = null; //lê as linhas de uma base de dados SQL Server reader = comm.ExecuteReader();
  • 21. nstutoriais.blogspot.com Página 20 //Se tiver coisa pra lê faça: if (reader.Read()) { //Variaveil usuarioConectado recebe campo usuarioComboBox.Text usuarioConectado = usuarioComboBox.Text; //Variavei nivelAcesso recebe o campo nivelAcessoComboBox.Text NivelAcesso = nivelAcessoComboBox.Text; //Declara a variavel que recebe o formulario frmTelaPrinciapal frmTelaPrincipal p = new frmTelaPrincipal(); //Esconde o formulario Tela de Login this.Hide(); //Mostrar o formulario frmTelaPrinciapl p.Show(); } else { MessageBox.Show("Usuário e/ou senha incorretas", "Aviso de Segurança", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show("Todos os Campos são obrigatórios", "Aviso de Segurança", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { //Gerar a exceção MessageBox.Show(ex.Message); } finally { //Finalizar tarefa conn.Close(); } Insira no evento Load do Fomulario frmLogin o código a seguir: //Limpar a ComboBox usuarioComboBox.SelectedIndex = -1; Entre no event do Formulario Tela de Login e clique na propriedade FormClosed e adicione o código a seguir: Application.Exit();
  • 22. nstutoriais.blogspot.com Página 21 5. Tela de Splash Clique na Tela de Splash e mude as propriedades a seguir: Propriedades Valores Size 380; 251 BackgroundImage Selecione a imagem de Fundo BackgroundImageLayout None ControlBox False FormBorderStyle None Icon Selecione o ícone do formulário MaximizeBox False MinimizeBox False ShowIcon False ShowInTaskbar False StartPostion CenterScreen Text Iniciando... Adicione uma ProgressBar faça isso Paleta ToolBox > Common Controls > ProgressBar Mude as propriedades a seguir: Propriedades Valores Location 69; 216 MarqueeAnimationSpeed 1000 Size 251;23 Style Continuous Adicone um Timer faça isso Paleta ToolBox > Components > Timer Mude as propriedades a seguir: Propriedades Valores Enable True Interval 32 Clique no ícone Event > Tick e duas vezes no TextBox corresponde a ele:
  • 23. nstutoriais.blogspot.com Página 22 Digite o código a seguir: //Incrementa 1 progressBar1.Increment(1); //Ser a progrresBar 1 for igual a 100 if (progressBar1.Value == 100) { //Pare timer1.Stop(); } Volte para o Design (F7) e clique duas vezes no formulário insira o código a seguir: //Código responsavel pela opacidade do formulario this.Opacity = 0; for (double cont = 0; cont <= 1; cont += 0.1) { this.Opacity = cont; this.Refresh(); System.Threading.Thread.Sleep(15); } O Design do formulário deve ficar assim: A Tela de Splash está pronta. Agora precisamos informar a Tela de Login que a Tela de Splash irá aparecer primeira do que ela. Volte para a Tela de Login.
  • 24. nstutoriais.blogspot.com Página 23 Insira a biblioteca a seguir using System.Threading; Dentro do Form1() adicione o seguinte: Thread t = new Thread(new ThreadStart(SplashScreen)); t.Start(); Thread.Sleep(5000); t.Abort(); Crie o método a seguir depois da chave de fechamento do Form1(): public void SplashScreen() { //Executar a Tela de Splash Application.Run(new frmSplash()); } O Código deverá fica assim (Esta em Azul o código):
  • 25. nstutoriais.blogspot.com Página 24 6. Tela de Usuário Clique no formulário frmUsuario e modifique as propriedades a seguir: Propriedades Valores Icon Selecione o Ícone Size 565; 492 StartPostion CenterScreen Text Cadastro de Usuário Insira uma GroupBox e mude as propriedades a seguir: Propriedades Valores Location 12; 45 Size 533; 150 Text Cadastrar Usuário Em Data Sources > tbUsuario > Mude o tipo de campo de DataGrid para Details como na imagem:
  • 26. nstutoriais.blogspot.com Página 25 Arraste o campo para dentro da GroupBox como na imagem: Renomei as Labels e coloque no canto esquerdo como na imagem:
  • 27. nstutoriais.blogspot.com Página 26 Renomeie o Text da Barra de Funcionalidade do formulário Seguindo a ordem da esquerda para a direita: Move first para Mover para o Primeiro Move previous Para Mover para o Anterior Current position Para Posição Atual of {0} Para De {0} e ToolTip para Total de Registro Move next Para Mover para o Próximo Move last Para Mover para o Último Add new Para Adicionar Registro Delete Para Excluir Registro Save Data para Salvar Registro Insira os componentes na GroupBox a seguir: Label Text = Filtrar Por ComboBox Edit Items: Código, usuário e name = cbmFiltrar Label Text = “=” TextBox Name = txtPesquisar Botão Name = btnPesquisar , Text = Pesquisar Como na imagem:
  • 28. nstutoriais.blogspot.com Página 27 Adicione uma groupBox mude a propriedade Text para Usuário(s) e arraste da paleta Data Source a DataGridView da tabela tbUsuario. Como na imagem: Clique na DataGridView na seta e clique em Dock in parent container. Como na imagem: Com isso a DataGridView ocupara o espaço inteiro da GroupBox.
  • 29. nstutoriais.blogspot.com Página 28 Desabilite a Enable Adding, Enable Editing e Enable Deleting. Clique em Edit Column. Coloque os campos a seguir como Visible = false; Senha e repita a senha. Como na imagem:
  • 30. nstutoriais.blogspot.com Página 29 Nesta etapa modifique o HeaderText para mudar o Texto de exibição e Width para mudar a largura de cada coluna. Clique duas vezes no botão Pesquisar e insira o código: try { if (cbmFiltrar.Text == "Código") { //Define a instrução Sql string sql = "SELECT * FROM tbUsuario WHERE idUsuario =" + txtPesquisar.Text + ""; //Lê os dados da variavel sql e conectar no cn cmd = new SqlCommand(sql, cn); //Abre conexão cn.Open(); //Define o valor da CommandType para cmd cmd.CommandType = CommandType.Text; /*Representa um conjunto de comandos de dados e uma conexão de banco de dados que são usados para preencher o DataSet e atualizar um banco de dados SQL Server.*/ SqlDataAdapter da = new SqlDataAdapter(cmd); //Representa uma tabela de dados na memória. DataTable usuario = new DataTable(); /* Adiciona ou atualiza linhas em um DataTable para que correspondam na fonte de * dados usando o DataTable.*/ da.Fill(usuario); /*A tbUsuarioDataGridView recebe o DataTable usuario*/ tbUsuarioDataGridView.DataSource = usuario; //Fechar a conexão } if (cbmFiltrar.Text == "Usuário") { //define a instrução SQL string sql = "SELECT * FROM tbUsuario WHERE usuario LIKE '%" + txtPesquisar.Text + "%'"; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable usuario = new DataTable(); da.Fill(usuario); tbUsuarioDataGridView.DataSource = usuario; } } catch (Exception ex) { MessageBox.Show(ex.Message);
  • 31. nstutoriais.blogspot.com Página 30 } finally { cn.Close(); } Feito isso o layout do formulário deve ficar assim: Mude a propriedade da TextBox Senha e Repita a Senha para: Campo Propriedade Para Valor Senha PasswordChar Para ● Repita a Senha PasswordChar Para ● Insira no ComboBox Nível de Acesso os componentes a Seguir(Edit Items): Administrador e Operador. Lembrando que a primeira linha é vazia e cada palavra em uma linha. Mude a propriedade DropDownStyle para DropDownList; Desabilite o campo Código, Data do Cadastro e Cadastrado por, pela propriedade Enable = false;
  • 32. nstutoriais.blogspot.com Página 31 Clique duas vezes no botão Salvar. Observe que ele esta preenchido, então iremos trabalhar com ele as regras de negocio. Quais? Os campos que são obrigatório Nível de Acesso e as mensagem de cadastro com sucesso, não foi possível o cadastro. Copie o Código a Seguir: try { //Se os campos estiver preenchido faça if ((usuarioTextBox.Text != "") && (nivelAcessoComboBox.Text != "") && (senhaTextBox.Text != "") && (repitaSenhaTextBox.Text != "")) { //Se as senhas forem igual faça if (senhaTextBox.Text == repitaSenhaTextBox.Text) { //Mostrar a Data do Cadastro na Hora if (dataDiaTextBox.Text == "") { dataDiaTextBox.Text = DateTime.Now.ToString(); } //Mostrar quem Cadastrou o usuario if (cadastradorPorTextBox.Text == "") { cadastradorPorTextBox.Text = frmLogin.usuarioConectado; } //Executar a aplicação this.Validate(); this.tbUsuarioBindingSource.EndEdit(); MessageBox.show("Cadastrado realizado com sucesso") this.tbUsuarioTableAdapter.Update(this.servicoDataSet.tbUsuario); } else { //Caso as senhas são diferentes MessageBox.Show("As senhas estão diferentes"); } } else { //Ser os campos não estiverem preenchido MessageBox.Show("Todos os campos não podem ficar vazio"); } } catch (Exception ex) { //Caso haja uma exceção será tratada neste código MessageBox.Show("Não foi possível salvar pelo seguinte
  • 33. nstutoriais.blogspot.com Página 32 motivo: " + ex.Message); } Adicione este método para limpar o formulário: private void LimparCampo() { idUsuarioTextBox.Clear(); usuarioTextBox.Clear(); senhaTextBox.Clear(); repitaSenhaTextBox.Clear(); nivelAcessoComboBox.SelectedIndex = -1; dataDiaTextBox.Clear(); cadastradorPorTextBox.Clear(); } Clique uma vez no DataGrid Usuario em Events > MouseDoubleClick LimparCampo(); idUsuarioTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[0].Value.ToString(); usuarioTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[1].Value.ToString(); senhaTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[2].Value.ToString(); repitaSenhaTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[3].Value.ToString(); nivelAcessoComboBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[4].Value.ToString(); dataDiaTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[5].Value.ToString(); cadastradorPorTextBox.Text = tbUsuarioDataGridView.CurrentRow.Cells[6].Value.ToString(); Termina o Cadastro de Usuário 7. Tela de Serviço Mude as propriedades do formulário a seguir: Propriedades Valores Icon Selecione o ícone da Aplicação Size 732; 633 StartPosition CenterScreen Text Cadastro de Serviço Arraste uma GroupBox dê o nome de Cadastro de Serviço. Mude as propriedades a seguir: Propriedades Valores Archor Top, Left, Right Size 600; 633 Text Dados do Serviço Location 27; 23
  • 34. nstutoriais.blogspot.com Página 33 Arraste as colunas da tabela para dentro da GroupBox e organize da sua forma. Selecione um Campo de cada vez: Descrição e Observação mudem as propriedades a seguir Propriedades Valores Location Descrição: 16; 71 | Observação: 16; 155 MultiLine True ScrollBars Vertical Size 523; 65 Código, Data do Cadastro e Cadastrado Por, desabilite a propriedade Enable. O layout ficou assim: Arraste uma GroupBox e adicione os campos a seguir: Label Text = Filtrar Por ComboBox Edit Items: Código, Nome e name = cbmFiltrar Label Text = “=” TextBox Name = txtPesquisar Botão Name = btnPesquisar , Text = Pesquisar
  • 35. nstutoriais.blogspot.com Página 34 O Layout ficou assim: Adicione uma groupBox(Text = Serviço) e arraste da paleta Data Sources a tabela tbServico. Faça como a imagem solicitar.
  • 36. nstutoriais.blogspot.com Página 35 Desabilite a Enable Adding, Enable Editing e Enable Deleting. Clique em Edit Columns renomei a propriedade HeaderText de cada campo como preferir. Segue uma sugestão:
  • 37. nstutoriais.blogspot.com Página 36 O Layout ficou assim: Volte para o código e insira o namespace a seguir: using System.Data.SqlClient; Embaixo do trecho de código public frmServico() adicione o código a seguir SqlConnection cn = new SqlConnection(Properties.Settings.Default.ServicoConnectionString); SqlCommand cmd = null;
  • 38. nstutoriais.blogspot.com Página 37 Como na imagem: Volte para o Design(F7), clique duas vezes no botão Pesquisar e insira o código a seguir: try { if (cbmFiltrar.Text == "Código") { //Define a instrução Sql string sql = "SELECT * FROM tbServico WHERE idServico =" + txtPesquisar.Text + ""; //Lê os dados da variavel sql e conectar no cn cmd = new SqlCommand(sql, cn); //Abre conexão cn.Open(); //Define o valor da CommandType para cmd cmd.CommandType = CommandType.Text; /*Representa um conjunto de comandos de dados e uma conexão de banco de dados que são usados para preencher o DataSet e atualizar um banco de dados SQL Server.*/ SqlDataAdapter da = new SqlDataAdapter(cmd); //Representa uma tabela de dados na memória. DataTable servico = new DataTable(); /* Adiciona ou atualiza linhas em um DataTable para que correspondam na fonte de * dados usando o DataTable.*/ da.Fill(servico); /*A tbUsuarioDataGridView recebe o DataTable usuario*/ tbServicoDataGridView.DataSource = servico; } if (cbmFiltrar.Text == "Nome") { //define a instrução SQL string sql = "SELECT * FROM tbServico WHERE nome
  • 39. nstutoriais.blogspot.com Página 38 LIKE '%" + txtPesquisar.Text + "%'"; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable servico = new DataTable(); da.Fill(servico); tbServicoDataGridView.DataSource = servico; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); } Clique duas vezes no botão Adicionar Registro e insira o código a seguir: //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "") { bindingNavigatorDeleteItem.Enabled = false; } Volte para o Design(F7) clique duas vezes no botão salvar e digite o código a seguir: try { //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "") { bindingNavigatorDeleteItem.Enabled = false; } //Se os campos estiver preenchido faça if (nomeTextBox.Text != "") { //Mostrar a Data do Cadastro na Hora if (dataDiaTextBox.Text == "") { dataDiaTextBox.Text = DateTime.Now.ToString(); } //Mostrar quem Cadastrou o usuario if (cadastradoPorTextBox.Text == "") { cadastradoPorTextBox.Text = frmLogin.usuarioConectado; } //Executar a aplicação this.Validate(); this.tbServicoBindingSource.EndEdit(); this.tbServicoTableAdapter.Update(this.servicoDataSet.tbServico); MessageBox.Show("Cadastrado realizado com sucesso");
  • 40. nstutoriais.blogspot.com Página 39 } else { //Ser os campos não estiverem preenchido MessageBox.Show("O Campo nome não pode ficar vazio"); } } catch (Exception ex) { //Caso haja uma exceção será tratada neste código MessageBox.Show("Não foi possível salvar pelo seguinte motivo: " + ex.Message); } Adicionar o método para limpar o formulário: private void LimparCampo() { idServicoTextBox.Clear(); nomeTextBox.Clear(); descricaoTextBox.Clear(); valorTextBox.Clear(); dataDiaTextBox.Clear(); cadastradoPorTextBox.Clear(); } Insira o código para preenche um formulário através de uma DataGrid. Clique uma vez na DataGrid tbServicoDataGridView em Events > MouseDoubleClick LimparCampo(); idServicoTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[0].Value.ToString(); nomeTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[1].Value.ToString(); descricaoTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[2].Value.ToString(); observacaoTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[3].Value.ToString(); valorTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[4].Value.ToString(); dataDiaTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[5].Value.ToString(); cadastradoPorTextBox.Text = tbServicoDataGridView.CurrentRow.Cells[6].Value.ToString(); Termina a Tela de Serviço:
  • 41. nstutoriais.blogspot.com Página 40 8. Tela de Cliente Mude as propriedades a Seguir: Propriedades Valores Icon Selecione o Ícone Size 959; 597 StartPosition CenterScreen Text Cadastro de Cliente Arraste uma GroupBox e adicione os valores nas propriedades: Propriedades Valores Location 12; 35 Size 422; 235 Text Dados Pessoais Na Data Source mude os tipos de Dados(Ex. TextBox, ComboBox) do campo CPF e telefone para MaskTextBox e Estado para ComboBox. Arraste para a GroupBox. Adicione uma groupBox para Pesquisar o Cliente e mude as propriedades a seguir: Propriedades Valores Location 440; 35 Size 496; 69 Text Pesquisar Cliente Adicione os seguintes componentes para dentro da GroupBox: Label Text = Filtrar Por ComboBox Edit Items: Código, Nome e name = cbmFiltrar Label Text = “=” MaskTextBox Name = txtPesquisar Botão Name = btnPesquisar , Text = Pesquisar Arraste uma GroupBox e adicione os valores nas propriedades: Propriedades Valores Location 440; 110 Size 499; 441 Text Cliente(s) Desabilite o Código, Data de Cadastro, Cadastrado por pela propriedade Enable;
  • 42. nstutoriais.blogspot.com Página 41 Na Paleta Data Sources > Arraste a tabela tbCliente para dentro da GroupBox, clique na seta ao lado, clique Dock in parent container. Desabilite a Enable Adding, Enable Editing e Enable Deleting e por fim clique em Edit Columns. Mude os nomes de acordo com a figura a seguir: Arraste uma GroupBox e adicione os valores nas propriedades: Propriedades Valores Location 12; 276 Size 422; 272 Text Serviço(s) Prestados:
  • 43. nstutoriais.blogspot.com Página 42 Na Paleta Data Sources > Arraste a tabela tbOrdemServico para dentro da GroupBox, clique na seta ao lado, clique Dock in parent container e por fim Edit Columns. Exclua a coluna idCliente. Mude os nomes das colunas de acordo com a figura a seguir: O Layout deverá ficar assim:
  • 44. nstutoriais.blogspot.com Página 43 Volte para o Design(F7) e adicione o namespace e duas variáveis a seguir. Volte para o Design(F7) e clique duas vezes no botão Pesquisar. Adicione o código a seguir: try { if (cbmFiltrar.Text == "Código") { //Define a instrução Sql string sql = "SELECT * FROM tbCliente WHERE idCliente =" + txtPesquisar.Text + ""; //Lê os dados da variavel sql e conectar no cn cmd = new SqlCommand(sql, cn); //Abre conexão cn.Open(); //Define o valor da CommandType para cmd cmd.CommandType = CommandType.Text; /*Representa um conjunto de comandos de dados e uma conexão de banco de dados que são usados para preencher o DataSet e atualizar um banco de dados SQL Server.*/ SqlDataAdapter da = new SqlDataAdapter(cmd); //Representa uma tabela de dados na memória. DataTable cliente = new DataTable(); /* Adiciona ou atualiza linhas em um DataTable para que correspondam na fonte de * dados usando o DataTable.*/ da.Fill(cliente); /*A tbUsuarioDataGridView recebe o DataTable usuario*/ tbClienteDataGridView.DataSource = cliente; //Fechar a conexão } if (cbmFiltrar.Text == "Nome") { //define a instrução SQL string sql = "SELECT * FROM tbCliente WHERE nome LIKE '%" + txtPesquisar.Text + "%'"; cmd = new SqlCommand(sql, cn); cn.Open();
  • 45. nstutoriais.blogspot.com Página 44 cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable cliente = new DataTable(); da.Fill(cliente); tbClienteDataGridView.DataSource = cliente; } if (cbmFiltrar.Text == "CPF") { //define a instrução SQL string sql = "SELECT * FROM tbCliente WHERE cpf ='" + txtPesquisar.Text + "'"; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable cliente = new DataTable(); da.Fill(cliente); tbClienteDataGridView.DataSource = cliente; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); } Volte para o Design(F7) clique uma vez no comboBox Filtrar entre no event e clique duas vezes na propriedade SelectedIndexChanged e insira o código a seguir: if (cbmFiltrar.Text == "Código") { txtPesquisar.Mask = ""; } if (cbmFiltrar.Text == "Nome") { txtPesquisar.Mask = ""; } if (cbmFiltrar.Text == "CPF") { txtPesquisar.Mask = "000,000,000-00"; } if (cbmFiltrar.Text == "") { txtPesquisar.Mask = ""; }
  • 46. nstutoriais.blogspot.com Página 45 Arraste o Componente Timer para o formulário e nas propriedades mude o seguinte: Enable para True Interval para 32 No event,Clique Duas vezes no Tick e insira o código abaixo: try { //define a instrução SQL string sql = "SELECT * FROM tbOrdemServico WHERE idCliente ='" + idClienteTextBox.Text + "'"; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable os = new DataTable(); da.Fill(os); tbOrdemServicoDataGridView.DataSource = os; } catch(Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); } Clique Duas vezes no botão Adicionar Registro e insira o código abaixo: //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "Operador") { bindingNavigatorDeleteItem.Enabled = false; } Adicione o método a seguir depois do trecho de código do botão Adicionar Registro public static bool ValidarCPF(string cpf) { // Caso coloque todos os numeros iguais int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 }; int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 }; string tempCpf; string digito; int soma; int resto; cpf = cpf.Trim(); cpf = cpf.Replace(".", "").Replace("-", ""); if (cpf.Length != 11) { return false; } tempCpf = cpf.Substring(0, 9); soma = 0; for (int i = 0; i < 9; i++)
  • 47. nstutoriais.blogspot.com Página 46 { soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i]; } resto = soma % 11; if (resto < 2) { resto = 0; } else { resto = 11 - resto; } digito = resto.ToString(); tempCpf = tempCpf + digito; soma = 0; for (int i = 0; i < 10; i++) { soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i]; } resto = soma % 11; if (resto < 2) { resto = 0; } else { resto = 11 - resto; } digito = digito + resto.ToString(); return cpf.EndsWith(digito); } Clique duas vezes no botão Salvar e insira o código abaixo: try { //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "Operador") { bindingNavigatorDeleteItem.Enabled = false; } if ((nomeTextBox.Text != "") && (cpfMaskedTextBox.Text != "")) { //Insere a Data if (dataDiaTextBox.Text == "") { dataDiaTextBox.Text = DateTime.Now.ToString(); } //Mostrar o usuário que cadastrou if (cadastradoPorTextBox.Text == "") {
  • 48. nstutoriais.blogspot.com Página 47 cadastradoPorTextBox.Text = frmLogin.usuarioConectado; } //Verificar o cpf if (ValidarCPF(cpfMaskedTextBox.Text)) { this.Validate(); this.tbClienteBindingSource.EndEdit(); this.tbClienteTableAdapter.Update(this.servicoDataSet.tbCliente); } else { MessageBox.Show("CPF incorreto", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show("O Campo 'Nome' e 'CPF não podem ficar vazio", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception ex) { MessageBox.Show("Não foi possível salvar pelo seguinte motivo: " + ex.Message); } Adicione este método para limpar o formulário: private void LimparCampo() { idClienteTextBox.Clear(); nomeTextBox.Clear(); cpfMaskedTextBox.Clear(); telefoneMaskedTextBox.Clear(); enderecoTextBox.Clear(); bairroTextBox.Clear(); cidadeTextBox.Clear(); estadoComboBox.SelectedIndex = -1; dataDiaTextBox.Clear(); cadastradoPorTextBox.Clear(); } Clique uma vez no DataGrid do Cliente > Events> MouseDoubleClick e adicione o código a seguir: Para preenche um formulário através do DataGrid LimparCampo(); idClienteTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[0].Value.ToString(); nomeTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[1].Value.ToString(); cpfMaskedTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[2].Value.ToString(); telefoneMaskedTextBox.Text =
  • 49. nstutoriais.blogspot.com Página 48 tbClienteDataGridView.CurrentRow.Cells[3].Value.ToString(); enderecoTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[4].Value.ToString(); bairroTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[5].Value.ToString(); cidadeTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[6].Value.ToString(); estadoComboBox.Text = tbClienteDataGridView.CurrentRow.Cells[7].Value.ToString(); dataDiaTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[8].Value.ToString(); cadastradoPorTextBox.Text = tbClienteDataGridView.CurrentRow.Cells[9].Value.ToString(); Pronto a Tela de Cliente esta pronta. 9. Tela Ordem de Serviço Modifique os componentes a seguir do formulário Ordem de Serviço: Propriedades Valores Size 505; 630 StartPosition CenterScreen Text Cadastrar OS Insira uma groupBox e mude as propriedades a seguir: Propriedades Valores Location 12; 27 Size 470; 228 Text Dados OS Mude na Paleta Data Sources os tipos de campo de idCliente e idServico para ComboBox., arraste e organize de acordo com o seu jeito. Podendo seguir Como na imagem:
  • 50. nstutoriais.blogspot.com Página 49 Adicione os seguintes componentes para dentro da GroupBox: Label Text = Filtrar Por ComboBox Edit Items: Código, Nome e name = cbmFiltrar Label Text = “=” TextBox Name = txtPesquisar Botão Name = btnPesquisar , Text = Pesquisar Adicione uma groupBox e dentro dela acrescente a tabela tbOrdemServico. Clique na seta ao lado e desmarque as opções a Enable Adding, Enable Editing, Enable Deleting, clique em Dock in parente containers e EditColumns: Modifique os nomes de cada coluna a seu gosto: Clique na comboBox Nome do Cliente na seta : Em Data Sources: Escolha a tabela tbCliente Em Member Value: Escolha a coluna idCliente Em Value Member: Escolha a coluna idNome Em Selected Value: Em tbOrdemServicoBindingSource > idCliente Faça isso com a comboBox Nome do Serviço. Clique duas vezes no botão pesquisar e insira o código a seguir: try { if (cbmFiltrar.Text == "Código OS") { //Define a instrução Sql string sql = "SELECT * FROM tbOrdemServico WHERE idOrdem =" + txtPesquisar.Text + ""; //Lê os dados da variavel sql e conectar no cn cmd = new SqlCommand(sql, cn); //Abre conexão cn.Open(); //Define o valor da CommandType para cmd cmd.CommandType = CommandType.Text; /*Representa um conjunto de comandos de dados e uma conexão de banco de dados que são usados para preencher o DataSet e atualizar um banco de dados SQL Server.*/ SqlDataAdapter da = new SqlDataAdapter(cmd);
  • 51. nstutoriais.blogspot.com Página 50 //Representa uma tabela de dados na memória. DataTable os = new DataTable(); /* Adiciona ou atualiza linhas em um DataTable para que correspondam na fonte de * dados usando o DataTable.*/ da.Fill(os); /*A tbUsuarioDataGridView recebe o DataTable usuario*/ tbOrdemServicoDataGridView.DataSource = os; //Fechar a conexão } if (cbmFiltrar.Text == "Código Cliente") { //define a instrução SQL string sql = "SELECT * FROM tbOrdemServico WHERE idCliente =" + txtPesquisar.Text + ""; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable os = new DataTable(); da.Fill(os); tbOrdemServicoDataGridView.DataSource = os; } if (cbmFiltrar.Text == "Código Serviço") { //define a instrução SQL string sql = "SELECT * FROM tbOrdemServico WHERE idServico=" + txtPesquisar.Text + ""; cmd = new SqlCommand(sql, cn); cn.Open(); cmd.CommandType = CommandType.Text; SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable os = new DataTable(); da.Fill(os); tbOrdemServicoDataGridView.DataSource = os; } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); }
  • 52. nstutoriais.blogspot.com Página 51 Desabilite o campo Código OS, Data do Cadastro e Cadastrado Por, pela propriedade Enable. Clique Duas vezes no botão Adicionar Registro e insira o código abaixo: //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "Operador") { bindingNavigatorDeleteItem.Enabled = false; } Clique duas Vezes no botão Salvar e digite o Código a seguir: try { //Desabilita o botão excluir para quem tiver nivel de acesso Operador if (frmLogin.NivelAcesso == "Operador") { bindingNavigatorDeleteItem.Enabled = false; } if ((idClienteComboBox.Text != "") && (idServicoComboBox.Text != "")) { if (dataDiaTextBox.Text == "") { dataDiaTextBox.Text = DateTime.Now.ToString(); } if (cadastradorPorTextBox.Text == "") { cadastradorPorTextBox.Text = frmLogin.usuarioConectado; } this.Validate(); this.tbOrdemServicoBindingSource.EndEdit(); this.tbOrdemServicoTableAdapter.Update(this.servicoDataSet.tbOrdemServ ico); MessageBox.Show("Cadastro realizado com sucesso"); } else { MessageBox.Show("Todos os campos são obrigatorio"); } } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { cn.Close(); }
  • 53. nstutoriais.blogspot.com Página 52 Seu Layout poderá ter ficado da seguinte forma: Insira o método para limpar o formulário: private void LimparCampo() { idOrdemTextBox.Clear(); idClienteComboBox.SelectedIndex = -1; idServicoComboBox.SelectedIndex = -1; dataDiaTextBox.Clear(); cadastradorPorTextBox.Clear(); } Adicione o Código para puxar os dados de uma DataGrid para o formulário: LimparCampo(); idOrdemTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[0].Value.ToString(); idClienteComboBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[1].Value.ToString(); idServicoComboBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[2].Value.ToString(); dataDiaTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[3].Value.ToString(); cadastradorPorTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[4].Value.ToString(); Pronto o Cadastrar OS está pronto na próxima Parte será criado a Tela Principal.
  • 54. nstutoriais.blogspot.com Página 53 10. Tela Principal Modifique as propriedades a seguir: Propriedades Valores BackgroundImage Escolha uma imagem de Plano de Fundo IsMdiContainer True Size 1024; 785 StartPosition CenterScreen Text Tela Principal Adicione ToolBox >Menu & Toolbars > MenuStrip. Como na imagem: Crie um sub Menu para o Cadastro como na imagem:
  • 55. nstutoriais.blogspot.com Página 54 Ao lado do Menu Cadastro existe um Texto chamado de Type Here clique nele e adicione o menu e o sub Menu como na imagem abaixo: Adicione o componente chamado ToolBox > ToolStrip. Como na imagem: Clique na Seta para baixo e adicione 4 Button chamado de: Por enquando o ToolStrip devera ficar assim: Name Padrão Modificar name Para DisplayStyle TextImageRelation Text toolStripButton1 tsbCliente Image and Text ImageAboveText Cliente toolStripButton2 tsbServico Image and Text ImageAboveText Serviço toolStripButton3 tsbOS Image and Text ImageAboveText Ordem de Serviço toolStripButton4 tsbLogoff Image and Text ImageAboveText Logoff Adicione as imagens de cada botão pela propriedade Image: O Seu ToolStrip poderá ter ficado assim:
  • 56. nstutoriais.blogspot.com Página 55 Caso as imagens estiverem pequenas desative(none) a propriedade ImageScaling. Atenção: Essa propriedade desativar o tamanho padrão das imagens ser você colocar uma imagem com resolução muito grande ira ficar feio, portanto coloque resolução de ate 32x32 no seu projeto. Arraste o componente chamado ToolBox>StatusStrip. Como na imagem: Clique na seta para baixo e adicione 5 StatusLabel com as propriedades a seguir Name Padrão Modificar name Para BorderSides Text toolStripStatusLabel1 tsslUsuario Right Vazio toolStripStatusLabel2 tsslIP Right Vazio toolStripStatusLabel3 tsslNomePC Right Vazio toolStripStatusLabel4 tsslData Right Vazio toolStripStatusLabel5 tsslHora Right Vazio O StatusStrip ficara assim: Clique duas vezes no formulário para abrir o event Load e insira o código a seguir: //Nível de Acesso: Ser o usuario for Operador o formulario estara invisivel if (frmLogin.NivelAcesso == "Operador") { //Nível de Operador não podera cadastrar usuário usuárioToolStripMenuItem.Visible = false; }
  • 57. nstutoriais.blogspot.com Página 56 //Mostrar o usuário conectado tsslUsuario.Text = "Usuário: " + frmLogin.usuarioConectado; //Mostra o nome do PC string myHost = System.Net.Dns.GetHostName(); tsslNomePC.Text = "Nome do PC: " + myHost; //Mostrar o IP do usuário System.Net.IPHostEntry myIPs = System.Net.Dns.GetHostEntry(myHost); foreach (System.Net.IPAddress myIP in myIPs.AddressList) { //Mostar o IP tsslIP.Text = "IP: " + myIP; } Insira o Componente Timer modifique as propriedades (Enable para True e Interval para 1000) e clique duas vezes nele e adicione o trecho de código a seguir: //Mostrar a Hora tsslData.Text = DateTime.Now.ToString("HH:mm"); Clique duas vezes no menu Cadastro> Usuário e insira o código abaixo: try { formulario.frmUsuario usuario = null; // form a ser aberto //procura form na relação de forms filhos foreach (Form frm in this.MdiChildren) { //se encontrou inicializa instancia de frmUsuario com o form ja aberto if (frm is formulario.frmUsuario) { usuario = (formulario.frmUsuario)frm; break; } } // se não encontrou na relação, instancia objeto, "seta" form pai e exibe form if (usuario == null) { usuario = new formulario.frmUsuario(); usuario.MdiParent = this; usuario.Show(); } //garante que ele fique em foco caso haja outros forms abertos usuario.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • 58. nstutoriais.blogspot.com Página 57 } Clique duas vezes no menu Cadastro > Cliente e insira o Código a seguir: try { frmCliente cliente = null; foreach (Form frm in this.MdiChildren) { if (frm is frmCliente) { cliente = (frmCliente)frm; break; } } if (cliente == null) { cliente = new frmCliente(); cliente.MdiParent = this; cliente.Show(); } cliente.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } Clique duas vezes no menu Cadastro> Serviço e adicione o Código a seguir: try { formulario.frmServico servico = null; foreach (Form frm in this.MdiChildren) { if (frm is formulario.frmServico) { servico = (formulario.frmServico)frm; break; } } if (servico == null) { servico = new formulario.frmServico(); servico.MdiParent = this; servico.Show(); } servico.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • 59. nstutoriais.blogspot.com Página 58 } Clique duas vezes no menu Cadastro > Ordem de Serviço e adicione o código a seguir: try { frmOS os = null; foreach (Form frm in this.MdiChildren) { if (frm is frmOS) { os = (frmOS)frm; break; } } if (os == null) { os = new frmOS(); os.MdiParent = this; os.Show(); } os.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } Clique duas vezes no menu Relatório > Cliente e adicione o código a seguir: try { frmRelCliente relcliente = null; foreach (Form frm in this.MdiChildren) { if (frm is frmRelCliente) { relcliente = (frmRelCliente)frm; break; } } if (relcliente == null) { relcliente = new frmRelCliente(); relcliente.MdiParent = this; relcliente.Show(); } relcliente.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • 60. nstutoriais.blogspot.com Página 59 } Clique duas vezes no menu Relatório > Serviço e adicione o código a seguir: try { frmRelServico relServico = null; foreach (Form frm in this.MdiChildren) { if (frm is frmRelServico) { relServico = (frmRelServico)frm; break; } } if (relServico == null) { relServico = new frmRelServico(); relServico.MdiParent = this; relServico.Show(); } relServico.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } Clique duas vezes no menu Relatório > Ordem de Serviço e adicione o código a seguir: try { frmRelOS relOS = null; foreach (Form frm in this.MdiChildren) { if (frm is frmRelOS) { relOS = (frmRelOS)frm; break; } } if (relOS == null) { relOS = new frmRelOS(); relOS.MdiParent = this; relOS.Show(); } relOS.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • 61. nstutoriais.blogspot.com Página 60 } Clique duas vezes no toolStrip1 > Cliente e insira o Código: try { frmCliente cliente = null; foreach (Form frm in this.MdiChildren) { if (frm is frmCliente) { cliente = (frmCliente)frm; break; } } if (cliente == null) { cliente = new frmCliente(); cliente.MdiParent = this; cliente.Show(); } cliente.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information); } Clique duas vezes no toolStrip1 > Serviço e insira o Código: try { formulario.frmServico servico = null; foreach (Form frm in this.MdiChildren) { if (frm is formulario.frmServico) { servico = (formulario.frmServico)frm; break; } } if (servico == null) { servico = new formulario.frmServico(); servico.MdiParent = this; servico.Show(); } servico.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
  • 62. nstutoriais.blogspot.com Página 61 } Clique duas vezes no toolStrip1 > Ordem de Serviço e insira o Código: try { frmOS os = null; foreach (Form frm in this.MdiChildren) { if (frm is frmOS) { os = (frmOS)frm; break; } } if (os == null) { os = new frmOS(); os.MdiParent = this; os.Show(); } os.Focus(); } catch (Exception ex) { MessageBox.Show("Não foi possível ser conectar ao formulário devido ao erro: " + ex.Message, "Aviso",– MessageBoxButtons.OK, MessageBoxIcon.Information); } Clique duas vezes no menu Cadastro > Sair e adicione o código a seguir: Application.Exit(); Entre no event do Formulario Tela Principal e clique na propriedade FormClosed e adicione o código a seguir: Application.Exit();
  • 63. nstutoriais.blogspot.com Página 62 Relatório 11. Relatório Cliente Entre no frmRelCliente modifique as propriedades a seguir: Propriedades Valores Size 615; 407 StartPosition CenterScreen Text Relatório de Cliente Adicione o componente pela ToolBox > Data > ReportView como na imagem:
  • 64. nstutoriais.blogspot.com Página 63 O Relatório esta em branco vamos adicionar um campo do tipo Tabela que mostrara todos os Clientes cadastrados no Sistema. Clique em cima do relatório > Menu Report > Marque Page Header(Cabeçalho) e Page Footer(Rodapé) . Como na imagem:
  • 65. nstutoriais.blogspot.com Página 64 Arraste do ToolBox o componente Table e insira na Body do Relatório. Como na imagem: Insira as colunas do Data Sources em Detail. Obseve que ele colocar as labels correspondente em Header. Como na imagem:
  • 66. nstutoriais.blogspot.com Página 65 Faça isso com os campos que irão para o relatório. Para adicionar uma coluna clique na primeira linha e com o botão direito > Insert Column to the Left(Esquerda) ou Right(Direita).
  • 67. nstutoriais.blogspot.com Página 66 O layout ficou assim: Em Page Header Adicione uma TextBox e coloque o Texto : Cadastro de Cliente. Mude o tamanho do texto, a cor do texto e do fundo pela barra de ferramentas. O Relatório esta pronto. Volte para o frmRelCliente, clique no ReportView na seta e selecione Repot1.rdlc Faça como a imagem a seguir:
  • 68. nstutoriais.blogspot.com Página 67 Faça isso com o Relatório Serviço e Relatório Ordem de Serviço 12. Relatório Serviço Siga o Passo Número 12. 13. Relatório Ordem de Serviço Siga o Passo Número 12. Sistema desenvolvido por Natanael Santos. 259.natanael@gmail.com