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

Valores ListItems DropDownList 121; 21

nstutoriais.blogspot.com

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 Image and Text Image and Text Image and Text Image and Text

TextImageRelation ImageAboveText ImageAboveText ImageAboveText ImageAboveText

Text Cliente Servio Ordem de Servio 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 O StatusStrip ficara assim:

Modificar name Para tsslUsuario tsslIP tsslNomePC tsslData tsslHora

BorderSides Text Right Right Right Right Right Vazio Vazio Vazio Vazio Vazio

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