Usuário com melhor resposta
Como preencher uma combo e uma list usando Binding

Pergunta
-
Boa tarde pessoal
Gostaria de preencher uma combobox e um list com valores vindo diretamente de um banco de dados
crie projetos separados porque é como eu vou utilizar.
namespace
ClassLibrary1{
public class Class1{
public DataTable PegaListaUf(){
OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inventer\bdinventer.mdb"); OleDbDataAdapter da; StringBuilder sql = new StringBuilder(); DataSet ds = new DataSet();cn.Open();
sql.Append(
"Select * from tbtab_uf");da =
new OleDbDataAdapter(sql.ToString(), cn);da.Fill(ds);
cn.Close();
return ds.Tables[0];}
}
}
<
ComboBox Height="22" Margin="56,88,42,0" Name="comboBox1" VerticalAlignment="Top" ItemsSource="{Binding Source={StaticResource Classe1.PegaListaUf}}" DisplayMemberPath="{Binding Nome}" SelectedValuePath="{Binding Codigo}"/>compila normalmente porem quando mando executar nao aparece nenhum valor na combobox
Grato pela ajuda
Respostas
-
Mais ou menos: Class1 está no namespace ClassLibrary1 e deve ter o prefixo "y" no Xaml. Além disso, você não criou uma instância do objeto. O código deveria ser mais ou menos assim:
<ObjectDataProvider ObjectType=”{x:Type y:Class1}”" MethodName="PegaListaUf" x:Key="Estado">
</ObjectDataProvider>
O resto deveria funcionar
Bruno -
Para isso, você deve criar um DataTemplate. Veja meu artigo no CodeProject (http://www.codeproject.com/KB/WPF/wpfviews.aspx)
Para deixar o primeiro item selecionado, faça SelectedIndex = 0
Se a resposta solucionou a sua dúvida, marque-a como tal, para que os outros possam se aproveitar da resposta.
Bruno
Todas as Respostas
-
Aqui você está fazendo binding com o método da classe, isso não funciona. Você tem que construir um ObjectDataProvider e usar o método lá. Veja este post da Bea Costa que mostra como fazer isso: http://www.beacosta.com/blog/?m=200603
Este meu artigo como fazer o binding direto com o BD usando Linq: http://www.codeproject.com/KB/WPF/wpfviews.aspx
Bruno -
Bruno
Agradeço pela atenção
Não sei se conseguir entender direito o que a bea costa colocou la
<
Window x:Class="Exemplo5.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:y="clr-namespace:ClassLibrary1;assembly=ClassLibrary1" Title="Window1" Height="327" Width="352"> <Window.Resources> <ObjectDataProvider ObjectInstance="StaticResource Class1" MethodName="PegaListaUf" x:Key="Estado"> </ObjectDataProvider> </Window.Resources> <Grid></
Window>Seria isso ?
-
Mais ou menos: Class1 está no namespace ClassLibrary1 e deve ter o prefixo "y" no Xaml. Além disso, você não criou uma instância do objeto. O código deveria ser mais ou menos assim:
<ObjectDataProvider ObjectType=”{x:Type y:Class1}”" MethodName="PegaListaUf" x:Key="Estado">
</ObjectDataProvider>
O resto deveria funcionar
Bruno -
Bruno
Agradeço pela ajuda funcionou da maneira que voce mencionou. So que na descrição da combobox estar aparecendo
System.Data.DataRowView e não os nomes dos estados que estao no banco. Outr pergunta seria teria alguma maneira de eu ja deixar selecionado o primeiro item da combo pelo Xaml.
-
Para isso, você deve criar um DataTemplate. Veja meu artigo no CodeProject (http://www.codeproject.com/KB/WPF/wpfviews.aspx)
Para deixar o primeiro item selecionado, faça SelectedIndex = 0
Se a resposta solucionou a sua dúvida, marque-a como tal, para que os outros possam se aproveitar da resposta.
Bruno -