Você está na página 1de 68

NS TUTORIAIS

Desenvolvendo Sistema
de Ordem de Servio 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 Servio com


Tela de Login, Tela de Splash, Cadastro de Cliente, Cadastro de Servio, Controle de Acesso,
Ordem de Servio e Relatrios.

Sumrio
Introduo ......................................................................................................................... 2
1.Criao do Banco de Dados........................................................................................... 3
2. Criando o Projeto .......................................................................................................... 5
3. Conexo com o Banco .................................................................................................. 6
4. Tela de Login .............................................................................................................. 13
5. Tela de Splash ............................................................................................................ 21
6. Tela de Usurio .......................................................................................................... 24
7. Tela de Servio .......................................................................................................... 32
8. Tela de Cliente ........................................................................................................... 40
9. Tela Ordem de Servio ............................................................................................... 48
10. Tela Principal ............................................................................................................ 53
11. Relatrio Cliente ....................................................................................................... 62
12. Relatrio Servio ...................................................................................................... 67
13. Relatrio Ordem de Servio ..................................................................................... 67

Introduo
O Sistema de Ordem de Servio foi desenvolvido pelo blog
nstutoriais.blogspot.com para aprendizagem. O Sistema conta com uma Tela de Splash,
Tela de Login, Tela Principal, Cadastro de Usurio, Cadastro de Cliente, Cadastro de
Servio, Ordem de Servio, Relatrio de Cliente,Servio e Ordem de Servio.
O Sistema esta dividido em doze partes que seguem uma lgica.
1 Parte: Criao do Banco de Dados usando o SQL Server: Neste 1 Parte
desenvolvido o banco de dados contendo trs tabelas.
2 Parte: Criando o Projeto: Utilizando o Visual Studio para desenvolver o
Sistema.
3 Parte: Conexo com o Banco de Dados: Nesta parte e feita conexo com o
banco de dados para o Sistema.
4 Parte: Tela de Login: Responsvel por fazer o controle de usurio no
formulrio
5 Parte: Tela de Splash: Responsvel por carregar o sistema
6 Parte: Tela de Usurio: Responsvel por inserir, excluir e atualizar os
usurios do sistema.
7 Parte: Tela de Servio: Responsvel pelo Cadastro de Servio.
8 Parte: Tela de Cliente: Responsvel pelo Cadastro de Cliente.
9 Parte: Tela Ordem de Servio: Responsvel por Emitir a Ordem de Servio.
10 Parte: Tela de Principal: Responsvel por fazer a juno dos formulrios.
11 Parte: Relatrio Cliente: Responsvel por mostrar todos os Clientes
cadastrados no sistema
12 Parte: Relatrio Servio: Responsvel por mostrar todos os Servios
cadastrados no sistema
13 Parte: Relatrio Ordem de Servio: Responsvel por mostrar todas as
Ordens de Servio cadastradas no sistema

nstutoriais.blogspot.com

Pgina 2

1.Criao do Banco de Dados

Entre no SQL Server e clique em New Query e adicione o cdigo a Seguir:


/*Cria o banco de dados*/
create database Servico
/*Limpe a Query ou Instruo */
/*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

Pgina 3

/*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

Pgina 4

2. Criando o Projeto
Crie o novo Projeto:

Selecione o Visual C#> Windows > Windows Applications:

D o nome de SISistema:

nstutoriais.blogspot.com

Pgina 5

3. Conexo com o Banco


Selecione no menu Data > Add New Data Sources:

Selecione Database:

nstutoriais.blogspot.com

Pgina 6

Selecione o boto Next:


Clique no boto New Connection:

Selecione Microsoft SQL Server Database File e depois Continue:

nstutoriais.blogspot.com

Pgina 7

Clique no boto Browse e Selecione o Banco de Dados e clique em Test Connection


depois clique OK para sair da caixa de Dilogo e OK do Formulrio Add Connection
para ir ao prximo formulrio:
Ateno (Geralmente o endereo da pasta dos bancos de dados desenvolvido no SQL
Server para Window XP :
C:\Arquivos de programas\Microsoft SQL Server\MSSQL.1\MSSQL\Data\)

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

Pgina 8

Marque a Tables para selecionar todas as tabelas e clique em Finish.

A princpio no aconteceu nada. Clique no menu Data > Show Data Sources para
aparecer as tabelas do Banco de Dados.

Como na imagem:

nstutoriais.blogspot.com

Pgina 9

Precisamos colocar os campos cdigo 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 formulrio form1.cs para frmLogin.cs;

nstutoriais.blogspot.com

Pgina 10

Neste momento crie os formulrios que iremos usar e depois volte para a Tela de Login;

Formulrios
Clique no Solution Explorer > SiServico > boto direito > Add > New Folder > d o
nome de Formulario:

Clique no Solution Explorer > Formulrio > boto direito > Add > Windows Form > d
o nome para cada formulrio da seguinte forma:

nstutoriais.blogspot.com

Pgina 11

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

Pgina 12

4. Tela de Login
Clique no formulrio frmLogin.cs e mude as propriedades a seguir:
Propriedade
Name
FormBorderStyle
Icon
MaximizeBox
MinimizeBox
Size
StartPosition
Text

Valores
frmLogin
FixedSingle
Selecione o icone
False
False
458; 229
CenterScreen
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

Pgina 13

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 esto com o tipo TextBox, precisamos mudar os campos
usurio e nivelAcesso para ComboBox da seguinte forma:
Selecione o campo usurio clique na seta para baixo e selecione ComboBox, faa isso
com o campo nivelAcesso:

nstutoriais.blogspot.com

Pgina 14

Observe que mudou as imagens dos campos:

Arraste os campos (usurio, nivelAcesso e senha) para a GroupBox e adicione dois


botes embaixo deles:

Observe que ele inseriu automaticamente uma barra e os componentes dela, remova
todos.
Mude os names dos botes para btnConectar e btnSair com os textos Conectar e Sair:
A ComboBox usurio (usuarioComboBox) fica responsvel por mostrar todos os
usurios cadastrados no sistema para fazer isso segue o passo a passo:

nstutoriais.blogspot.com

Pgina 15

Clique apenas uma vez no campo > Clique na seta superior a direita que ira aparecer >
Marque a opo Use data bound items como na imagem:

Em Data Source > Selecione a tabela tbUsuario. Como na imagem:

nstutoriais.blogspot.com

Pgina 16

No Display Member > Selecione o que ser visto pelo Usurio que a coluna usurio.
Como na imagem:

No Value Display > Selecione a coluna que equivale ao Display Member. Como na
imagem:

Modifique as propriedades a seguir:


Propriedades
AutoCompleteSOurce
DropDownStyle
Size

nstutoriais.blogspot.com

Valores
ListItems
DropDownList
121; 21

Pgina 17

Na ComboBox Nvel 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 boto Sair e digite o cdigo a seguir:
Close(); //Para sair da aplicao

nstutoriais.blogspot.com

Pgina 18

No topo da pagina digite o namespace a seguir:


using System.Data.SqlClient; //Classe Responsvel pela Conexo com o SQL Server
Declare duas variveis 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 boto Conectar e digite o cdigo:
try
{
//Verificar ser os campos esto 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 conexo
conn.Open();
SqlDataReader reader = null;
//l as linhas de uma base de dados SQL Server
reader = comm.ExecuteReader();

nstutoriais.blogspot.com

Pgina 19

//Se tiver coisa pra l faa:


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("Usurio e/ou senha incorretas",
"Aviso de Segurana",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
else
{
MessageBox.Show("Todos os Campos so
obrigatrios",
"Aviso de Segurana",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
//Gerar a exceo
MessageBox.Show(ex.Message);
}
finally
{
//Finalizar tarefa
conn.Close();
}

Insira no evento Load do Fomulario frmLogin o cdigo a seguir:


//Limpar a ComboBox
usuarioComboBox.SelectedIndex = -1;

Entre no event do Formulario Tela de Login e clique na propriedade FormClosed e


adicione o cdigo a seguir:
Application.Exit();

nstutoriais.blogspot.com

Pgina 20

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 formulrio
MaximizeBox
False
MinimizeBox
False
ShowIcon
False
ShowInTaskbar
False
StartPostion
CenterScreen
Text
Iniciando...
Adicione uma ProgressBar faa isso Paleta ToolBox > Common Controls > ProgressBar
Mude as propriedades a seguir:
Propriedades
Location
MarqueeAnimationSpeed
Size
Style

Valores
69; 216
1000
251;23
Continuous

Adicone um Timer faa 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

Pgina 21

Digite o cdigo 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 formulrio insira o cdigo a seguir:
//Cdigo 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 formulrio 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

Pgina 22

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 mtodo a seguir depois da chave de fechamento do Form1():


public void SplashScreen()
{
//Executar a Tela de Splash
Application.Run(new frmSplash());
}

O Cdigo dever fica assim (Esta em Azul o cdigo):

nstutoriais.blogspot.com

Pgina 23

6. Tela de Usurio
Clique no formulrio frmUsuario e modifique as propriedades a seguir:
Propriedades
Valores
Icon
Selecione o cone
Size
565; 492
StartPostion
CenterScreen
Text
Cadastro de Usurio
Insira uma GroupBox e mude as propriedades a seguir:
Propriedades
Valores
Location
12; 45
Size
533; 150
Text
Cadastrar Usurio
Em Data Sources > tbUsuario > Mude o tipo de campo de DataGrid para Details como
na imagem:

nstutoriais.blogspot.com

Pgina 24

Arraste o campo para dentro da GroupBox como na imagem:

Renomei as Labels e coloque no canto esquerdo como na imagem:

nstutoriais.blogspot.com

Pgina 25

Renomeie o Text da Barra de Funcionalidade do formulrio

Seguindo a ordem da esquerda para a direita:


Move first
para Mover para o Primeiro
Para Mover para o Anterior
Move previous
Para Posio Atual
Current position
Para De {0} e ToolTip para Total de Registro
of {0}
Para Mover para o Prximo
Move next
Para Mover para o ltimo
Move last
Para Adicionar Registro
Add new
Para Excluir Registro
Delete
Save Data
para Salvar Registro

Insira os componentes na GroupBox a seguir:


Label
Text = Filtrar Por
ComboBox
Edit Items: Cdigo, usurio e name = cbmFiltrar
Label
Text = =
TextBox
Name = txtPesquisar
Boto
Name = btnPesquisar , Text = Pesquisar
Como na imagem:

nstutoriais.blogspot.com

Pgina 26

Adicione uma groupBox mude a propriedade Text para Usurio(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 espao inteiro da GroupBox.

nstutoriais.blogspot.com

Pgina 27

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

Pgina 28

Nesta etapa modifique o HeaderText para mudar o Texto de exibio e Width para
mudar a largura de cada coluna.
Clique duas vezes no boto Pesquisar e insira o cdigo:
try
{
if (cbmFiltrar.Text == "Cdigo")
{
//Define a instruo 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 conexo
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexo de banco de dados
que so usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memria.
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 conexo
}
if (cbmFiltrar.Text == "Usurio")
{
//define a instruo 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

Pgina 29

}
finally
{
cn.Close();
}

Feito isso o layout do formulrio deve ficar assim:

Mude a propriedade da TextBox Senha e Repita a Senha para:


Campo
Propriedade
Para
PasswordChar
Para
Senha
PasswordChar
Para
Repita a Senha

Valor

Insira no ComboBox Nvel 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 Cdigo, Data do Cadastro e Cadastrado por, pela propriedade
Enable = false;

nstutoriais.blogspot.com

Pgina 30

Clique duas vezes no boto Salvar.


Observe que ele esta preenchido, ento iremos trabalhar com ele as regras de negocio.

Quais?
Os campos que so obrigatrio
Nvel de Acesso e as mensagem de cadastro com sucesso, no foi possvel o cadastro.
Copie o Cdigo a Seguir:
try
{
//Se os campos estiver preenchido faa
if ((usuarioTextBox.Text != "") &&
(nivelAcessoComboBox.Text != "") && (senhaTextBox.Text != "") &&
(repitaSenhaTextBox.Text != ""))
{
//Se as senhas forem igual faa
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 aplicao
this.Validate();
this.tbUsuarioBindingSource.EndEdit();
MessageBox.show("Cadastrado realizado com
sucesso")
this.tbUsuarioTableAdapter.Update(this.servicoDataSet.tbUsuario);
}
else
{
//Caso as senhas so diferentes
MessageBox.Show("As senhas esto diferentes");
}
}
else
{
//Ser os campos no estiverem preenchido
MessageBox.Show("Todos os campos no podem ficar
vazio");
}
}
catch (Exception ex)
{
//Caso haja uma exceo ser tratada neste cdigo
MessageBox.Show("No foi possvel salvar pelo seguinte

nstutoriais.blogspot.com

Pgina 31

motivo: " + ex.Message);


}

Adicione este mtodo para limpar o formulrio:


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 Usurio

7. Tela de Servio
Mude as propriedades do formulrio a seguir:
Propriedades
Valores
Icon
Selecione o cone da Aplicao
Size
732; 633
StartPosition
CenterScreen
Text
Cadastro de Servio
Arraste uma GroupBox d o nome de Cadastro de Servio.
Mude as propriedades a seguir:
Propriedades
Valores
Archor
Top, Left, Right
Size
600; 633
Text
Dados do Servio
Location
27; 23

nstutoriais.blogspot.com

Pgina 32

Arraste as colunas da tabela para dentro da GroupBox e organize da sua forma.


Selecione um Campo de cada vez:
Descrio e Observao mudem as propriedades a seguir
Propriedades
Valores
Location
Descrio: 16; 71 | Observao: 16;
155
MultiLine
True
ScrollBars
Vertical
Size
523; 65
Cdigo, 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: Cdigo, Nome e name = cbmFiltrar
Label
Text = =
TextBox
Name = txtPesquisar
Boto
Name = btnPesquisar , Text = Pesquisar

nstutoriais.blogspot.com

Pgina 33

O Layout ficou assim:

Adicione uma groupBox(Text = Servio) e arraste da paleta Data Sources a tabela


tbServico. Faa como a imagem solicitar.

nstutoriais.blogspot.com

Pgina 34

Desabilite a Enable Adding, Enable Editing e Enable Deleting. Clique em Edit Columns
renomei a propriedade HeaderText de cada campo como preferir. Segue uma sugesto:

nstutoriais.blogspot.com

Pgina 35

O Layout ficou assim:

Volte para o cdigo e insira o namespace a seguir:


using System.Data.SqlClient;

Embaixo do trecho de cdigo public frmServico() adicione o cdigo a seguir


SqlConnection cn = new
SqlConnection(Properties.Settings.Default.ServicoConnectionString);
SqlCommand cmd = null;

nstutoriais.blogspot.com

Pgina 36

Como na imagem:

Volte para o Design(F7), clique duas vezes no boto Pesquisar e insira o cdigo a
seguir:
try
{
if (cbmFiltrar.Text == "Cdigo")
{
//Define a instruo 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 conexo
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexo de banco de dados
que so usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memria.
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 instruo SQL
string sql = "SELECT * FROM tbServico WHERE nome

nstutoriais.blogspot.com

Pgina 37

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 boto Adicionar Registro e insira o cdigo a seguir:


//Desabilita o boto excluir para quem tiver nivel de acesso Operador
if (frmLogin.NivelAcesso == "")
{
bindingNavigatorDeleteItem.Enabled = false;
}

Volte para o Design(F7) clique duas vezes no boto salvar e digite o cdigo a seguir:
try
{
//Desabilita o boto excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "")
{
bindingNavigatorDeleteItem.Enabled = false;
}
//Se os campos estiver preenchido faa
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 aplicao
this.Validate();
this.tbServicoBindingSource.EndEdit();
this.tbServicoTableAdapter.Update(this.servicoDataSet.tbServico);
MessageBox.Show("Cadastrado realizado com sucesso");

nstutoriais.blogspot.com

Pgina 38

}
else
{
//Ser os campos no estiverem preenchido
MessageBox.Show("O Campo nome no pode ficar
vazio");
}
}
catch (Exception ex)
{
//Caso haja uma exceo ser tratada neste cdigo
MessageBox.Show("No foi possvel salvar pelo seguinte
motivo: " + ex.Message);
}

Adicionar o mtodo para limpar o formulrio:


private void LimparCampo()
{
idServicoTextBox.Clear();
nomeTextBox.Clear();
descricaoTextBox.Clear();
valorTextBox.Clear();
dataDiaTextBox.Clear();
cadastradoPorTextBox.Clear();
}

Insira o cdigo para preenche um formulrio atravs 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 Servio:

nstutoriais.blogspot.com

Pgina 39

8. Tela de Cliente
Mude as propriedades a Seguir:
Propriedades
Icon
Size
StartPosition
Text

Valores
Selecione o cone
959; 597
CenterScreen
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: Cdigo, Nome e name = cbmFiltrar
Label
Text = =
MaskTextBox
Name = txtPesquisar
Boto
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 Cdigo, Data de Cadastro, Cadastrado por pela propriedade Enable;

nstutoriais.blogspot.com

Pgina 40

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
Servio(s) Prestados:

nstutoriais.blogspot.com

Pgina 41

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

Pgina 42

Volte para o Design(F7) e adicione o namespace e duas variveis a seguir.

Volte para o Design(F7) e clique duas vezes no boto Pesquisar. Adicione o cdigo a
seguir:
try
{
if (cbmFiltrar.Text == "Cdigo")
{
//Define a instruo 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 conexo
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexo de banco de dados
que so usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);
//Representa uma tabela de dados na memria.
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 conexo
}
if (cbmFiltrar.Text == "Nome")
{
//define a instruo SQL
string sql = "SELECT * FROM tbCliente WHERE nome
LIKE '%" + txtPesquisar.Text + "%'";
cmd = new SqlCommand(sql, cn);
cn.Open();

nstutoriais.blogspot.com

Pgina 43

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 instruo 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 cdigo a seguir:
if (cbmFiltrar.Text == "Cdigo")
{
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

Pgina 44

Arraste o Componente Timer para o formulrio e nas propriedades mude o seguinte:


Enable para True
Interval para 32
No event,Clique Duas vezes no Tick e insira o cdigo abaixo:
try
{
//define a instruo 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 boto Adicionar Registro e insira o cdigo abaixo:


//Desabilita o boto excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}

Adicione o mtodo a seguir depois do trecho de cdigo do boto 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

Pgina 45

{
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 boto Salvar e insira o cdigo abaixo:


try
{
//Desabilita o boto 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 usurio que cadastrou
if (cadastradoPorTextBox.Text == "")
{

nstutoriais.blogspot.com

Pgina 46

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 no podem
ficar vazio",
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception ex)
{
MessageBox.Show("No foi possvel salvar pelo seguinte
motivo: " + ex.Message);
}

Adicione este mtodo para limpar o formulrio:


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


cdigo a seguir: Para preenche um formulrio atravs 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

Pgina 47

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 Servio


Modifique os componentes a seguir do formulrio Ordem de Servio:
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

Pgina 48

Adicione os seguintes componentes para dentro da GroupBox:


Label
Text = Filtrar Por
ComboBox
Edit Items: Cdigo, Nome e name = cbmFiltrar
Label
Text = =
TextBox
Name = txtPesquisar
Boto
Name = btnPesquisar , Text = Pesquisar
Adicione uma groupBox e dentro dela acrescente a tabela tbOrdemServico. Clique na
seta ao lado e desmarque as opes 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
Faa isso com a comboBox Nome do Servio.
Clique duas vezes no boto pesquisar e insira o cdigo a seguir:
try
{
if (cbmFiltrar.Text == "Cdigo OS")
{
//Define a instruo 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 conexo
cn.Open();
//Define o valor da CommandType para cmd
cmd.CommandType = CommandType.Text;
/*Representa um conjunto de comandos de dados e
uma conexo de banco de dados
que so usados para preencher o DataSet e
atualizar um banco de dados SQL Server.*/
SqlDataAdapter da = new SqlDataAdapter(cmd);

nstutoriais.blogspot.com

Pgina 49

//Representa uma tabela de dados na memria.


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 conexo
}
if (cbmFiltrar.Text == "Cdigo Cliente")
{
//define a instruo 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 == "Cdigo Servio")
{
//define a instruo 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

Pgina 50

Desabilite o campo Cdigo OS, Data do Cadastro e Cadastrado Por, pela propriedade
Enable.
Clique Duas vezes no boto Adicionar Registro e insira o cdigo abaixo:
//Desabilita o boto excluir para quem tiver nivel de
acesso Operador
if (frmLogin.NivelAcesso == "Operador")
{
bindingNavigatorDeleteItem.Enabled = false;
}

Clique duas Vezes no boto Salvar e digite o Cdigo a seguir:


try
{
//Desabilita o boto 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 so obrigatorio");
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
cn.Close();
}

nstutoriais.blogspot.com

Pgina 51

Seu Layout poder ter ficado da seguinte forma:

Insira o mtodo para limpar o formulrio:


private void LimparCampo()
{
idOrdemTextBox.Clear();
idClienteComboBox.SelectedIndex = -1;
idServicoComboBox.SelectedIndex = -1;
dataDiaTextBox.Clear();
cadastradorPorTextBox.Clear();
}

Adicione o Cdigo para puxar os dados de uma DataGrid para o formulrio:


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 prxima Parte ser criado a Tela Principal.

nstutoriais.blogspot.com

Pgina 52

10. Tela Principal


Modifique as propriedades a seguir:
Propriedades
BackgroundImage
IsMdiContainer
Size
StartPosition
Text

Valores
Escolha uma imagem de Plano de Fundo
True
1024; 785
CenterScreen
Tela Principal

Adicione ToolBox >Menu & Toolbars > MenuStrip. Como na imagem:

Crie um sub Menu para o Cadastro como na imagem:

nstutoriais.blogspot.com

Pgina 53

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 Padro

Modificar
name Para
toolStripButton1 tsbCliente
toolStripButton2 tsbServico
toolStripButton3 tsbOS
toolStripButton4 tsbLogoff

DisplayStyle

TextImageRelation

Text

Image and
Text
Image and
Text
Image and
Text
Image and
Text

ImageAboveText

Cliente

ImageAboveText

Servio

ImageAboveText

Ordem de Servio

ImageAboveText

Logoff

Adicione as imagens de cada boto pela propriedade Image:


O Seu ToolStrip poder ter ficado assim:

nstutoriais.blogspot.com

Pgina 54

Caso as imagens estiverem pequenas desative(none) a propriedade ImageScaling.


Ateno: Essa propriedade desativar o tamanho padro das imagens ser voc colocar
uma imagem com resoluo muito grande ira ficar feio, portanto coloque resoluo 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 Padro
toolStripStatusLabel1
toolStripStatusLabel2
toolStripStatusLabel3
toolStripStatusLabel4
toolStripStatusLabel5

Modificar name
Para
tsslUsuario
tsslIP
tsslNomePC
tsslData
tsslHora

BorderSides Text
Right
Right
Right
Right
Right

Vazio
Vazio
Vazio
Vazio
Vazio

O StatusStrip ficara assim:

Clique duas vezes no formulrio para abrir o event Load e insira o cdigo a seguir:
//Nvel de Acesso: Ser o usuario for Operador o formulario estara
invisivel
if (frmLogin.NivelAcesso == "Operador")
{
//Nvel de Operador no podera cadastrar usurio
usurioToolStripMenuItem.Visible = false;
}

nstutoriais.blogspot.com

Pgina 55

//Mostrar o usurio conectado


tsslUsuario.Text = "Usurio: " +
frmLogin.usuarioConectado;
//Mostra o nome do PC
string myHost = System.Net.Dns.GetHostName();
tsslNomePC.Text = "Nome do PC: " + myHost;
//Mostrar o IP do usurio
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 cdigo a seguir:
//Mostrar a Hora
tsslData.Text = DateTime.Now.ToString("HH:mm");

Clique duas vezes no menu Cadastro> Usurio e insira o cdigo abaixo:


try
{
formulario.frmUsuario usuario = null; // form a ser
aberto
//procura form na relao 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 no encontrou na relao, 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

nstutoriais.blogspot.com

Pgina 56

Clique duas vezes no menu Cadastro > Cliente e insira o Cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}

Clique duas vezes no menu Cadastro> Servio e adicione o Cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

nstutoriais.blogspot.com

Pgina 57

Clique duas vezes no menu Cadastro > Ordem de Servio e adicione o cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}

Clique duas vezes no menu Relatrio > Cliente e adicione o cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

nstutoriais.blogspot.com

Pgina 58

Clique duas vezes no menu Relatrio > Servio e adicione o cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}

Clique duas vezes no menu Relatrio > Ordem de Servio e adicione o cdigo 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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

nstutoriais.blogspot.com

Pgina 59

Clique duas vezes no toolStrip1 > Cliente e insira o Cdigo:


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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}

Clique duas vezes no toolStrip1 > Servio e insira o Cdigo:


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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);

nstutoriais.blogspot.com

Pgina 60

Clique duas vezes no toolStrip1 > Ordem de Servio e insira o Cdigo:


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("No foi possvel ser conectar ao
formulrio devido ao erro: " + ex.Message,
"Aviso",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}

Clique duas vezes no menu Cadastro > Sair e adicione o cdigo a seguir:
Application.Exit();

Entre no event do Formulario Tela Principal e clique na propriedade FormClosed e


adicione o cdigo a seguir:
Application.Exit();

nstutoriais.blogspot.com

Pgina 61

Relatrio
11. Relatrio Cliente
Entre no frmRelCliente modifique as propriedades a seguir:
Propriedades
Valores
615; 407
Size
CenterScreen
StartPosition
Relatrio de Cliente
Text
Adicione o componente pela ToolBox > Data > ReportView como na imagem:

nstutoriais.blogspot.com

Pgina 62

O Relatrio esta em branco vamos adicionar um campo do tipo Tabela que mostrara
todos os Clientes cadastrados no Sistema.

Clique em cima do relatrio > Menu Report > Marque Page Header(Cabealho) e Page
Footer(Rodap) . Como na imagem:

nstutoriais.blogspot.com

Pgina 63

Arraste do ToolBox o componente Table e insira na Body do Relatrio. 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

Pgina 64

Faa isso com os campos que iro para o relatrio. Para adicionar uma coluna clique na
primeira linha e com o boto direito > Insert Column to the Left(Esquerda) ou
Right(Direita).

nstutoriais.blogspot.com

Pgina 65

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 Relatrio esta pronto. Volte para o frmRelCliente, clique no ReportView na seta e


selecione Repot1.rdlc Faa como a imagem a seguir:

nstutoriais.blogspot.com

Pgina 66

Faa isso com o Relatrio Servio e Relatrio Ordem de Servio

12. Relatrio Servio


Siga o Passo Nmero 12.

13. Relatrio Ordem de Servio


Siga o Passo Nmero 12.

Sistema desenvolvido por Natanael Santos.


259.natanael@gmail.com

nstutoriais.blogspot.com

Pgina 67

Você também pode gostar