locked
Child Window RRS feed

  • Pergunta

  • Estou utilizando uma child window do Toolkit para possibitar ao usuário cadastrar novos tipo de ocorrência, esta "janela" é chamada pelo form principal com o clique do botão, o código que chama a childwindo é este:

     cwOcorrencia janelaOcorrencia = new cwOcorrencia();
    
     janelaOcorrencia.Show();
    
    

    Na child window eu faço o processo de inserção da nova ocorrência no banco de dados, e preciso agora repopular/recarregar um ComboBox que está na página que chamou a child window, para que seja mostrado esta nova ocorrência cadastrada. Como eu faria isto? Sei que é necessário acessar o Code Behind da "página pai", que chamou a child window, mas como faço isto?

    Agradecido e Feliz Natal a todos.

    Guilherme Carvalho
    terça-feira, 22 de dezembro de 2009 12:35

Respostas

  • para saber quando vc fechar a ChildWindow... usa o evento Closing


            public void AbrirJanela()
            {
                var child = new ChildWindow();
                child.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(child_Closing);
                child.Show();
            }
    
            void child_Closing(object sender, System.ComponentModel.CancelEventArgs e)
            {
                var child = (ChildWindow)sender;
                comboBox.SelectedItem = child.TextBox1.Text;
            }



    um jeito q faz a mesma coisa... mas é visualmente mais agradavel:

    public void AbrirJanela()
            {
                var child = new ChildWindow();
                child.Closing += delegate(object sender, System.ComponentModel.CancelEventArgs e)
                {
                    comboBox.SelectedItem = child.TextBox1.Text;
                };
                child.Show();
            }

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    segunda-feira, 4 de janeiro de 2010 19:22

Todas as Respostas

  • Caro Guilherme, a sua classe cwOcorrencia herda uma classe provavelmente
    childwindow, não tenho como testar agora mas acredito que essa classe deve
    expor um evento relativo ao fechamento da janela, captura esse evento no código da “pagina pai” e repopula o combobox.

    Outra alternativa é você expor na sua classe cwOcorrencia um evento construído por você, ai quando você persistir a ocorrência a “pagina pai” captura esse evento e recebe da própria classe cwOcorrencia a entidade referente a esta ocorrência, assim você consegue incluí-la no combobox sem ir buscar novamente no banco de dados.

    Espero ter ajudado, Abraço.
    terça-feira, 22 de dezembro de 2009 16:05
  • Anselmo, basta fazer o seguinte:

    neste código, basta acrescentar, janelaOcorrencia.Closed +=new EventHandler(janelaOcorrencia_Closed); antes da linha do .Show();
        cwOcorrencia janelaOcorrencia = new cwOcorrencia();
        janelaOcorrencia.Show();

    ficando assim:

        cwOcorrencia janelaOcorrencia = new cwOcorrencia();
        janelaOcorrencia.Closed +=new EventHandler(janelaOcorrencia_Closed);
        janelaOcorrencia.Show();

    Aí no novo evento janelaOcorrencia_Closed basta verificar se o DialogResult == true e dentro chamar a função que carrega o combo.

    Muito obrigado pela ajuda.


    Guilherme Carvalho
    segunda-feira, 4 de janeiro de 2010 19:09
  • para saber quando vc fechar a ChildWindow... usa o evento Closing


            public void AbrirJanela()
            {
                var child = new ChildWindow();
                child.Closing += new EventHandler<System.ComponentModel.CancelEventArgs>(child_Closing);
                child.Show();
            }
    
            void child_Closing(object sender, System.ComponentModel.CancelEventArgs e)
            {
                var child = (ChildWindow)sender;
                comboBox.SelectedItem = child.TextBox1.Text;
            }



    um jeito q faz a mesma coisa... mas é visualmente mais agradavel:

    public void AbrirJanela()
            {
                var child = new ChildWindow();
                child.Closing += delegate(object sender, System.ComponentModel.CancelEventArgs e)
                {
                    comboBox.SelectedItem = child.TextBox1.Text;
                };
                child.Show();
            }

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    segunda-feira, 4 de janeiro de 2010 19:22
  • O único "problema" que encontrei ao utilizar

                var child = (ChildWindow)sender;
                comboBox.SelectedItem = child.TextBox1.Text;

    é que como as chamadas são assincronas, a segunda linha na verdade não executa porque ele vai disparar o cadastro do novo tipo e logo em seguida, antes de terminar o cadastro a rotina tenta fazer a comparação mas no comboBox ainda não existe o novo elemento, teria alguma forma de fazer funcionar?

    Guilherme Carvalho
    terça-feira, 12 de janeiro de 2010 15:40
  • Bem... isso é uma questao de logica do sistema entao....

    seria melhor se feito algo tipo

    - Abre o formulario de cadastro.
    - No evento closing (caso clique em OK) recarrega o combobox (ou apenas inclui o novo item) e seleciona o mesmo;

    public void AbrirJanela()
            {
                var child = new ChildWindow();
                child.Closing += delegate(object sender, System.ComponentModel.CancelEventArgs e)
                {
                    if (child.Incluido == true) {
                       objetoDeDados.EventoDeCargaDeDadosCompletada += delegate(objeto source, ArgumtoDoEveto args) {
                              comboBox.ItemSource = args.Result;
                              comboBox.SelectedItem = child.TextBox1.Text;
                       }
                       objetoDeDados.MetodoDeCargaAsync();
                    }
                };
                child.Show();
            }


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 12 de janeiro de 2010 15:57