none
Desenvolver tela com Dataset - melhorar programação RRS feed

  • Pergunta

  • Boa tarde,

    alguém poderia explicar ou repassar algum link que mostre uma forma mais simples de se trabalhar no desenvolvimento de telas como essa abaixo utilizando Dataset?

    Nesse caso acima primeiro seria gravado o pedido e os itens do pedido irão utilizar o código da chave primária (CD_PEDIDO) para fazer referencia ao pedido.

    Eu já estou tentando fazer, mas está muito trabalhoso, não estou vendo vantagem utilizar Datagridview no lugar de ListView (sempre usei ListView e até agora parece ser mais fácil). Até agora tive que gravar o pedido por primeiro sem dataset, obter o código do novo pedido, atualizar esse valor na grid para finalmente gravar os itens com DataSet.

    Além disso tive que fazer alguns tratamento a mais para o usuário poder digitar direto na grid:

    • No evento CellValidating da grid faz consulta no banco pra pesquisar o item ou o estoque que o usuário digitou;
    • No evento EditingControlShowing tive que fazer tratamento para não permitir digitar letras onde se pode números;
    • Nesse mesmo evento tive que fazer tratamento para que após pressionar F7 abra as telas de consulta de Item e Estoque para suas respectivas células (célula de item abre janela de consulta de item; célula de estoque abre janela de consulta de estoque);
    • No evento RowValidated tive que fazer tratamento para excluir o registro caso todas as células estejam em branco. Isso foi necessário para que o Dataset não gere erro na hora de gravar os itens que possuem campo em branco; 

    Vejam como isso está trabalhoso. =/

    Tem como melhorar isso?

    Agradeço quem puder me ajudar. Já estou em cima disso há semanas.


    segunda-feira, 26 de outubro de 2015 15:51

Respostas

  • @Eugenio

    Se tu preferes usar Listview, porque nao usa? Porque trocaste pra Datagridview?


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quarta-feira, 28 de outubro de 2015 19:32
    quarta-feira, 28 de outubro de 2015 14:51
    Moderador

Todas as Respostas

  • @Eugenio

    Se tu preferes usar Listview, porque nao usa? Porque trocaste pra Datagridview?


    A flower cannot blossom without sunshine, and man cannot live without love.

    • Marcado como Resposta Marcos SJ quarta-feira, 28 de outubro de 2015 19:32
    quarta-feira, 28 de outubro de 2015 14:51
    Moderador
  • É que eu usava Oracle Forms e conseguia editar os registros direto na grid e no C# só consegui trabalhar com ListView que não permite editar direto na grid. Para ListView tenho que criar métodos para consulta, gravação e exclusão.

    Daí dentre várias pesquisas os desenvolvedores, principalmente o Macoratti, sempre falaram que Datagriview é uma "poderosa" ferramenta que permite fazer muitas coisas como incluir, atualizar e excluir registros sem código nenhum código, basta usar apenas Dataset.

    Hoje eu finalmente consegui fazer ele funcionar dessa forma, mas não tá 100% ainda.

    Por isso queria saber o que poderia fazer pra melhorar.

    quinta-feira, 29 de outubro de 2015 15:57
  • Bem vindo ao Forum

    O datagridview e sim um control poderoso, cheio de recursos uteis. 

    Em relacao ao dataset, e um control ou class que te permite fazer "crud".

    Se tu tiveres uma duvida, posta aki o codigo que a gente ajuda...assim fica mais facil...


    A flower cannot blossom without sunshine, and man cannot live without love.

    quinta-feira, 29 de outubro de 2015 16:37
    Moderador
  • A minha dúvida é sobre esse monte de código que precisei desenvolver pra deixar a tela funcionando com todas as validações necessárias, por exemplo:

       1) Para digitar apenas número na célula tive que criar um método pra validar e associar ele no evento EditingControlShowing da seguinte forma:

       e.Control.KeyPress -= permitirSoNumeros;

       *e.Control.KeyPress += new KeyPressEventHandler(permitirSoNumeros);

      2) Para abrir uma tela de pesquisa de empresa numa celula e tela de pesquisa de cliente em outra celula tive que criar os métodos e associar eles no evento EditingControlShowing da seguinte forma:

      * (e.Control as TextBox).KeyDown -= consultarItem;

      * (e.Control as TextBox).KeyDown += new KeyEventHandler(consultarItem);

      3) Para excluir o penúltimo registro da grid caso esteja em branco (além do último que sempre fica em branco) eu tive que fazer tratamento no evento RowValidated da grid:

      * BeginInvoke(new Funcoes.delegateExcluirRegistroDataGridView(Funcoes.deletarLinhaDataGridView), dgItensPedido, dgItensPedido.CurrentRow.Index);

    Veja como é muito trabalhoso fazer coisas simples funcionarem.

    Nessa thread que abri tempo atrás o Lucas D Santos falou que demora menos de 20 minutos pra fazer uma tela. Para desenvolver a minha tela com esses códigos que mostrei, fora outros que tem, demorei quase uma semana.

    quinta-feira, 29 de outubro de 2015 17:14
  • @Eugenio

    Levou muito tempo porque foi a primeira vez a trabalhar com este control. Pela proxima vez , fica mais facil. Esta e a ideia quando se programa, melhorar toda vez que comecamos um novo programa.


    A flower cannot blossom without sunshine, and man cannot live without love.

    sexta-feira, 30 de outubro de 2015 20:41
    Moderador
  • Tudo bem, vou tentar melhorar.

    Mas como faço pra gravar pedido e os itens do pedido através do Dataset (pergunta inicial dessa thread)?Primeiro o sistema tem que gravar o pedido, obter o CD_PEDIDO e gravar os itens do pedido com essa chave estrangeira.

    quarta-feira, 4 de novembro de 2015 18:08