none
Erro no meu Combo RRS feed

  • Pergunta

  • Galera boa Tarde.

    Estou aplicando um combobox na minha aplicação e eu não to conseguindo puxa do banco de dados os dados q la constam.

    Vou postar os codigos aqui se alguem conseguir me ajudar ficarei grato.

    Este é o meu código XAML.

    UserControl x:Class="SilverlightApplication7.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">
    
        <Grid x:Name="LayoutRoot" Background="White">
            
            <c1:C1ComboBox x:Name="combo" Width="250" Height="23" ItemsSource="{Binding  Path=Cor, Mode=OneWay}" SelectedValue="{Binding Path=Cor, Mode=TwoWay}" DisplayMemberPath="Cor" SelectedValuePath="Cor" />
    
        </Grid>
    </UserControl>

    Minha Camada BLL que conecta com o banco

    namespace BLL
    {
        public class CorBLL
        {
            public CorInfoCollection ConsultaCorBLL()
            {
                SqlConnection c = new SqlConnection();
    
                string conexao = "Server=********\\**********;Database=Teste;UID=*******;PWD=****";
    
                CorInfoCollection Cor = new CorInfoCollection();
    
                c.ConnectionString = conexao;
                c.Open();
                SqlCommand cmd = c.CreateCommand();
                cmd.CommandText = " Select idCor, Cor from TabelaTeste ";
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                DataTable dt = new DataTable();
                da.Fill(dt);
    
                foreach (DataRow dtCor in dt.Rows)
                {
                    Cor.Add(new CorInfo
                    {
                        IdCor = Convert.ToInt32(dtCor["idCor"]),
                        cor = dtCor["Cor"].ToString(),
                    });
                }
    
                c.Close();
                return Cor;
            }
        }
    }

    Minha Camada MODELS

    namespace Models
    {
        public class CorInfo
        {
            private int idCor;
            public int IdCor
            {
                get { return idCor; }
                set { idCor = value; }
            }
    
            private string Cor;
            public string cor
            {
                get { return Cor; }
                set { Cor = value; }
            }
        }
    
        public class CorInfoCollection : List<CorInfo> { }
    }

    A interface do meu serviço (WCF)

    [OperationContract]
    CorInfoCollection ConsultaCorBLL();

    quarta-feira, 4 de julho de 2012 16:29

Respostas

  • Então altera seu combo, assim:

    <c1:C1ComboBox x:Name="combo" Width="250" Height="23" SelectedValue="{Binding Path=Cor, Mode=TwoWay}" DisplayMemberPath="cor" SelectedValuePath="cor" />
    Além disso, tem a propriedade ItemSource que não tem necessidade de colocar binding.

    Samuel Fabel

    • Marcado como Resposta Phi Tiago sexta-feira, 6 de julho de 2012 13:21
    sexta-feira, 6 de julho de 2012 13:15

Todas as Respostas

  • meu serviço (WCF)

    public CorInfoCollection ConsultaCorBLL()
            {
                CorBLL Cor = new CorBLL();
    
                CorInfoCollection result = null;
    
                try
                {
                    return Cor.ConsultaCorBLL();
                }
    
                catch
                {
    
                }
    
                return result;
            }

    meu código que carrega o serviço e o combo

    public partial class MainPage : UserControl
        {
            servicoWCF.Service1Client servico = new Service1Client();
    
            public MainPage()
            {
                InitializeComponent();
    
                servico.ConsultaCorBLLCompleted += new EventHandler<ConsultaCorBLLCompletedEventArgs>(servico_ConsultaCorBLLCompleted);
    
                CarregarCombo();
    
            }
    
            private void CarregarCombo()
            {
                servico.ConsultaCorBLLAsync();
            }
    
            void servico_ConsultaCorBLLCompleted(object sender, ConsultaCorBLLCompletedEventArgs e)
            {
                combo.ItemsSource = e.Result;
            }
        }

    A foto da execução do programa:

    Se alguem conseguir me ajude, parece q o que esta no meu banco de dados carrega so que ele nao fica visivel.

    quarta-feira, 4 de julho de 2012 16:34
  • O C# é case sensitive. Na propriedade você colocou a propriedade começando com minusculo e no xaml você colocou começando com maiusculo. Será que não é esse o problema?

    Samuel Fabel

    sexta-feira, 6 de julho de 2012 12:46
  • não pq no caso no xaml eu to pegando direto do meu banco então o nome da coluna é aquela mesmo ! entendeu !?
    sexta-feira, 6 de julho de 2012 12:55
  • Não foi o que eu quis dizer.

    Quando você colocou o combo no xaml, você fez assim:

    <c1:C1ComboBox x:Name="combo" Width="250" Height="23" ItemsSource="{Binding  Path=Cor, Mode=OneWay}" SelectedValue="{Binding Path=Cor, Mode=TwoWay}" DisplayMemberPath="Cor" SelectedValuePath="Cor" />

    E na Propriedade que é o que se referencia no Combo, colocou assim:

    public string cor
            {
                get { return Cor; }
                set { Cor = value; }
            }

    Samuel Fabel

    sexta-feira, 6 de julho de 2012 13:00
  • Sim Samuel so que se vc reparar tem meu private string e meu public string, ee na minha classe onde eu to fazendo a conexão e faço o meu foreach do meu banco na hora q digito 'Cor' para eu poder pegar as linhas, ele so me libera a 'Cor' com o 'C' minuscolo pq está declarando assim na minha classe MODELS !!.
    sexta-feira, 6 de julho de 2012 13:08
  • Então altera seu combo, assim:

    <c1:C1ComboBox x:Name="combo" Width="250" Height="23" SelectedValue="{Binding Path=Cor, Mode=TwoWay}" DisplayMemberPath="cor" SelectedValuePath="cor" />
    Além disso, tem a propriedade ItemSource que não tem necessidade de colocar binding.

    Samuel Fabel

    • Marcado como Resposta Phi Tiago sexta-feira, 6 de julho de 2012 13:21
    sexta-feira, 6 de julho de 2012 13:15
  • Ok Samuel, agora eu fui um Tolo de não ter pecebido isso ! hahahaha ! muito obrigado pela ajuda rapaz, possui e-mail pra q podemos troca !?
    sexta-feira, 6 de julho de 2012 13:22
  • No meu perfil tem meu linkedin. Me adiciona lá.

    • Editado Samuel Fabel sexta-feira, 6 de julho de 2012 14:11
    sexta-feira, 6 de julho de 2012 14:09