none
Como selecionar um item do ComboBox após a carga de dados RRS feed

  • Pergunta

  • Olá a todos,

    tenho o seguinte ComboBox:
                            <ComboBox x:Name="cboEmpresas" HorizontalAlignment="Center" Width="250"  
                                      DisplayMemberPath="desEmpresa" DataContext="codEmpresa"
                                      SelectionChanged="cboEmpresas_SelectionChanged" Height="26" 
                                      Loaded="cboEmpresas_Loaded"
                            </ComboBox>

    e carrego os dados da seguinte maneira:
            private void cboEmpresas_Loaded(object sender, RoutedEventArgs e)
            {
                LoadOperation<EntEmpresa> LoadEmp = this._empresaContext.Load(this._empresaContext.GetEmpresasQuery());
                cboEmpresas.ItemsSource = LoadEmp.Entities;            
            }

    a minha dúvida é como selecionar um item desse ComboBox (quando a página abre os itens estão lá mas o primeiro esta em branco, o usuário obrigatoriamente deve selecionar um item manualmente), pois se tento setar o indice "cboEmpresas.SelectedIndex = 0" ocorre um erro.
    quarta-feira, 25 de novembro de 2009 14:04

Respostas

  • Olá,

    Se vc obtem os dados via WebService (WCF),  pode disparar o processo para consumir o serviço no metodo "Page1_Loaded".

    Eu faço desta forma.
    Veja a seguir:

     

    private void FrmPessoa_Loaded(object sender, RoutedEventArgs e)
    {
        // Popula ComboBoxs
        var proxy = new WcfParceiroClient();
        proxy.RecuperaTabelasDeValidacoesPessoaCompleted += new EventHandler<RecuperaTabelasDeValidacoesPessoaCompletedEventArgs>(proxy_RecuperaTabelasDeValidacoesPessoaCompleted);
    }

     

    void proxy_RecuperaTabelasDeValidacoesPessoaCompleted(object sender, RecuperaTabelasDeValidacoesPessoaCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            if (e.Result != null)
            {
                // ComboBox "Sexo"
                var sexoList = e.Result.DataValidationSvPnPFisicaSexo;
                foreach (TabelaDeReferencia tr in sexoList)
                {
                    this.cboSexo.Items.Add(tr.Descricao.Trim());
                }
            }
        }
    }

    abs,


    Pedro Palma
    • Marcado como Resposta du_nirvana quarta-feira, 25 de novembro de 2009 19:05
    quarta-feira, 25 de novembro de 2009 18:10
  • Pedro eu não fiz exatamente assim, mas sua dica me deu um norte, veja como ficou meu código:

            public cadUsuarios()
            {
                InitializeComponent();            
                this.Loaded += new RoutedEventHandler(cadUsuarios_Loaded);
            }
    
            void cadUsuarios_Loaded(object sender, RoutedEventArgs e)
            {
                LoadOperation<EntEmpresa> LoadEmp = this._empresaContext.Load(this._empresaContext.GetEmpresasQuery());
                LoadEmp.Completed += new EventHandler(LoadEmp_Completed);                          
            }
    
            void LoadEmp_Completed(object sender, EventArgs e)
            {
                cboEmpresas.ItemsSource = this._empresaContext.EntEmpresas;
                cboEmpresas.SelectedIndex = 0;
            }
    
    Muito obrigado!
    • Marcado como Resposta du_nirvana quarta-feira, 25 de novembro de 2009 19:05
    quarta-feira, 25 de novembro de 2009 19:05

Todas as Respostas

  • Olá,

    Popule o ComboBox no costrutor da pagina. Veja a seguir:

     

    public Page1()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(Page1_Loaded);
    }

     

    void Page1_Loaded(object sender, RoutedEventArgs e)
    {
        LoadOperation<EntEmpresa> LoadEmp =
    this._empresaContext.Load(this._empresaContext.GetEmpresasQuery());
        cboEmpresas.ItemsSource = LoadEmp.Entities;
        if (cboEmpresas.Items.Count > 0)
        {
            cboEmpresas.SelectedIndex = 0;
        }
    }

    Espero que seja este o problema,

    abs,


    Pedro Palma
    quarta-feira, 25 de novembro de 2009 17:30
  • Olá Pedro,

    muito obrigado pela resposta mas isso não resolveu, a questão é que independente do evento o total de itens no combo é sempre zero, acredito que seja pelo fato do processo ser assíncrono, mas não faço idéia de como resolver.
    quarta-feira, 25 de novembro de 2009 17:40
  • Olá,

    Se vc obtem os dados via WebService (WCF),  pode disparar o processo para consumir o serviço no metodo "Page1_Loaded".

    Eu faço desta forma.
    Veja a seguir:

     

    private void FrmPessoa_Loaded(object sender, RoutedEventArgs e)
    {
        // Popula ComboBoxs
        var proxy = new WcfParceiroClient();
        proxy.RecuperaTabelasDeValidacoesPessoaCompleted += new EventHandler<RecuperaTabelasDeValidacoesPessoaCompletedEventArgs>(proxy_RecuperaTabelasDeValidacoesPessoaCompleted);
    }

     

    void proxy_RecuperaTabelasDeValidacoesPessoaCompleted(object sender, RecuperaTabelasDeValidacoesPessoaCompletedEventArgs e)
    {
        if (e.Error == null)
        {
            if (e.Result != null)
            {
                // ComboBox "Sexo"
                var sexoList = e.Result.DataValidationSvPnPFisicaSexo;
                foreach (TabelaDeReferencia tr in sexoList)
                {
                    this.cboSexo.Items.Add(tr.Descricao.Trim());
                }
            }
        }
    }

    abs,


    Pedro Palma
    • Marcado como Resposta du_nirvana quarta-feira, 25 de novembro de 2009 19:05
    quarta-feira, 25 de novembro de 2009 18:10
  • Pedro eu não fiz exatamente assim, mas sua dica me deu um norte, veja como ficou meu código:

            public cadUsuarios()
            {
                InitializeComponent();            
                this.Loaded += new RoutedEventHandler(cadUsuarios_Loaded);
            }
    
            void cadUsuarios_Loaded(object sender, RoutedEventArgs e)
            {
                LoadOperation<EntEmpresa> LoadEmp = this._empresaContext.Load(this._empresaContext.GetEmpresasQuery());
                LoadEmp.Completed += new EventHandler(LoadEmp_Completed);                          
            }
    
            void LoadEmp_Completed(object sender, EventArgs e)
            {
                cboEmpresas.ItemsSource = this._empresaContext.EntEmpresas;
                cboEmpresas.SelectedIndex = 0;
            }
    
    Muito obrigado!
    • Marcado como Resposta du_nirvana quarta-feira, 25 de novembro de 2009 19:05
    quarta-feira, 25 de novembro de 2009 19:05