segunda-feira, 30 de maio de 2011

Sistema de Ordem de Serviço em C# - SQL Server e Crystal Reports Parte X

9. Tela Ordem de Serviço

Modifique os componentes a seguir do formulário Ordem de Serviço:
Propriedades
Valores
Size
505; 630
StartPosition
CenterScreen
Text
Cadastrar OS

Insira uma groupBox e mude as propriedades a seguir:
Propriedades
Valores
Location
12; 27
Size
470; 228
Text
Dados OS

Mude na Paleta Data Sources os tipos de campo de idCliente e idServico para ComboBox., arraste e organize de acordo com o seu jeito. Podendo seguir Como na imagem:
















Adicione os seguintes componentes para dentro da GroupBox:
Label
Text = Filtrar Por
ComboBox
Edit Items: Código, Nome e name = cbmFiltrar
Label
Text = “=”
TextBox
Name = txtPesquisar
Botão
Name = btnPesquisar , Text = Pesquisar

Adicione uma groupBox e dentro dela acrescente a tabela tbOrdemServico. Clique na seta ao lado e desmarque as opções a Enable Adding, Enable Editing, Enable Deleting, clique em Dock in parente containers e EditColumns:

Modifique os nomes de cada coluna a seu gosto:












Clique na comboBox  Nome do Cliente na seta :
Em Data Sources: Escolha a tabela tbCliente
Em Member Value: Escolha a coluna idCliente
Em Value Member: Escolha a coluna idNome
Em Selected Value: Em tbOrdemServicoBindingSource > idCliente

Faça isso com a comboBox Nome do Serviço.

Clique duas vezes no botão pesquisar e insira o código a seguir:
try
            {
                if (cbmFiltrar.Text == "Código OS")
                {
                    //Define a instrução Sql
                    string sql = "SELECT * FROM tbOrdemServico WHERE idOrdem =" + txtPesquisar.Text + "";
                   
                    //Lê os dados da variavel sql e conectar no cn
                    cmd = new SqlCommand(sql, cn);
                    //Abre conexão
                    cn.Open();
                   
                    //Define o valor da CommandType para cmd
                    cmd.CommandType = CommandType.Text;

                    /*Representa um conjunto de comandos de dados e uma conexão de banco de dados
                    que são usados para preencher o DataSet e atualizar um banco de dados SQL Server.*/
                    SqlDataAdapter da = new SqlDataAdapter(cmd);

                    //Representa uma tabela de dados na memória.
                    DataTable os = new DataTable();

                    /* Adiciona ou atualiza linhas em um DataTable para que correspondam na fonte de
                     * dados usando o DataTable.*/
                    da.Fill(os);

                    /*A tbUsuarioDataGridView recebe o DataTable usuario*/
                    tbOrdemServicoDataGridView.DataSource = os;

                    //Fechar a conexão
                  

                }
                if (cbmFiltrar.Text == "Código Cliente")
                {                                   
                    //define a instrução SQL
                    string sql = "SELECT * FROM tbOrdemServico WHERE idCliente =" + txtPesquisar.Text + "";
                    cmd = new SqlCommand(sql, cn);
                    cn.Open();
                    cmd.CommandType = CommandType.Text;
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable os = new DataTable();
                    da.Fill(os);
                    tbOrdemServicoDataGridView.DataSource = os;
                   
                }
                if (cbmFiltrar.Text == "Código Serviço")
                {
                    //define a instrução SQL
                    string sql = "SELECT * FROM tbOrdemServico WHERE idServico=" + txtPesquisar.Text + "";
                    cmd = new SqlCommand(sql, cn);
                    cn.Open();
                    cmd.CommandType = CommandType.Text;
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    DataTable os = new DataTable();
                    da.Fill(os);
                    tbOrdemServicoDataGridView.DataSource = os;

                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                cn.Close();
            }

 Desabilite o campo Código OS, Data do Cadastro e Cadastrado Por,  pela propriedade Enable.

Clique Duas vezes no botão Adicionar Registro e insira o código abaixo:
                //Desabilita o botão excluir para quem tiver nivel de acesso Operador
                if (frmLogin.NivelAcesso == "Operador")
                {
                    bindingNavigatorDeleteItem.Enabled = false;
                }



Clique duas Vezes no botão Salvar e digite o Código a seguir:
    try
            {
                //Desabilita o botão excluir para quem tiver nivel de acesso Operador
                if (frmLogin.NivelAcesso == "Operador")
                {
                    bindingNavigatorDeleteItem.Enabled = false;
                }
               
if ((idClienteComboBox.Text != "") && (idServicoComboBox.Text != ""))
            {
                if (dataDiaTextBox.Text == "")
                {
                    dataDiaTextBox.Text = DateTime.Now.ToString();
                }
                if (cadastradorPorTextBox.Text == "")
                {
                    cadastradorPorTextBox.Text = frmLogin.usuarioConectado;
                }
                this.Validate();
                this.tbOrdemServicoBindingSource.EndEdit();                 this.tbOrdemServicoTableAdapter.Update(this.servicoDataSet.tbOrdemServico);
MessageBox.Show("Cadastro realizado com sucesso");
            }
            else
            {
                MessageBox.Show("Todos os campos são obrigatorio");
            }
          }
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                cn.Close();
            }

  
Seu Layout poderá ter ficado da seguinte forma:
























Insira o método para limpar o formulário:
private void LimparCampo()
        {
            idOrdemTextBox.Clear();
            idClienteComboBox.SelectedIndex = -1;
            idServicoComboBox.SelectedIndex = -1;
            dataDiaTextBox.Clear();
            cadastradorPorTextBox.Clear();
        }

Adicione o Código para puxar os dados de uma DataGrid para o formulário:
LimparCampo();
            idOrdemTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[0].Value.ToString();
            idClienteComboBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[1].Value.ToString();
            idServicoComboBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[2].Value.ToString();
            dataDiaTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[3].Value.ToString();
            cadastradorPorTextBox.Text = tbOrdemServicoDataGridView.CurrentRow.Cells[4].Value.ToString();

Pronto o Cadastrar OS está pronto na próxima Parte será criado a Tela Principal.
By: Natanael



13 comentários:

  1. Natanael, Bom dia

    Tive problemas na tela de ordens de serviço, quando abro ela, é mostrado pra mim os nomes dos clientes e os serviços que cadastrei, só que quando vou adicionar e seleciono o cliente o sistema não deixa eu clicar em mais nada na tela, simplesmente não consigo selecionar o serviço.

    Quando puder me da mais esta ajuda.

    Grato

    Uélisson

    ResponderExcluir
  2. Boa noite,

    Estou tendo o mesmo problema acima do Uelisson.

    Voce pode me ajudar tambem?

    Abs,

    Fabricio Rocha

    ResponderExcluir
  3. O Sistema apenas salvar a ordem de serviço quando o código do cliente e o código do serviço estive preenchido com o número do código e não o nome do cliente e do serviço. Pois no banco de dados foi declarado com inteiro.

    ResponderExcluir
  4. Natanael,

    Mais uma duvida ao preencher a comboBox Nome do Cliente.

    Segundo o tutorial devo escolher "Em Value Member: Escolha a coluna idNome".
    No entanto, não existe na tabela tbCliente a coluna idnome, somente a coluna nome.

    Posso utilizar a coluna nome da tabela tbCliente em value member?

    Abs,

    Fabricio Rocha

    ResponderExcluir
  5. no value member utilize a coluna id(codigo) do serviço e do cliente

    ResponderExcluir
  6. Oi Natanael, td bom cara??? gostei muito do tutorial consegui fazer todo o sistema ficou perfeito, todas a telas, incluido;excluindo e salvando, mas tambem assim como os outros não consegui deixar a tela frmOS funcionando, ela trava depois que esquelhe um dos combobox (cliente ou serviço),depois que trava pra fechar aplicação só msm pelo gerenciador de tarefas do windows , veja como fiz para as duas combos

    para a combo cliente:

    Data source: tbClienteBindingSource
    Display Member : Nome
    Value Member: idCliente
    select value: tbOrdemservicoBindingSource - idCliente

    Data source: tbServicoBindingSource
    Display Member : Descricao
    Value Member: idServico
    selected value: tbOrdemservicoBindingSource - idServico

    outra coisa percebi que a combo estava com a propriedade dropdownStyle = dropdowm, mudei para dropdownList, mas não adiantou....

    agradeço se puder me ajudar pois gostei muito da experiencia e queria ver o sosftware rodando 100%... valeu fico no aguardo...

    ResponderExcluir
  7. Também estou com o mesmo problema na tela de ordem de serviço
    depois que eu escolho o IDcliente ele não me deixa escolher o ID servico a combobox trava e a tela também, tenho que fechar no ctrl+al+del
    :(

    ResponderExcluir
  8. descobri o erro pessoal, o problema está na configuração da combobox, onde o a atribuição da "value member" não pode ser uma string, um nome por ex tem que ser o ID isso para a idcliente e a idservico

    abrax

    ResponderExcluir
  9. luiz
    estou com o mesmo problema.
    voce poderia colocar o codigo exato q vc utilizou?
    nos moldes do Giliardi.
    obrigado amigo

    ResponderExcluir
  10. Bom dia Luiz,
    Como o Luiz dizer, ele não aceita uma string por isso ainda não é possivel selecionar pelo nome, então, no value member insira como ID, e assim ira funcionar.

    ResponderExcluir
  11. Alguém conseguiu fazer a tela de cadastro de frmOS funcionar? Preciso de ajuda com ela. Trava a aplicação.

    ResponderExcluir
  12. Alguem acrescentou no Form OS o nome do Serviço e o Nome do cliente?

    ResponderExcluir
  13. Pessoal,

    Já coloquei o ValueMember como Id mas ainda está travando, o que mais tenho que alterar?

    ResponderExcluir