Inquiridor
Dúvidas envolvendo SQL Server, ComboBox e DataGrid

Pergunta
-
Boa tarde pessoal,
sou aluno de Análise de Sistemas e estou montando um sistema em C#. Não é a minha praia e acabei decidindo desenvolver ele usando WPF e integrar um banco feito no SQL Server.
Gostaria que vocês verificassem se estou fazendo as coisas no caminho certo.Primeiramente a conexão com o banco:
App.config
</connectionStrings> <add name="Connection" providerName="System.Data.SqlClient" connectionString="Network Library=DBMSSOCN; Data Source=127.0.0.1,1433; Initial Catalog=banco; Integrated Security=SSPI;"/> </connectionStrings>
DataBaseConnection.cs
using System.Configuration; using System.Data; using System.Data.SqlClient; namespace SisAVideo { class DatabaseConnection{ private string connectionString; private SqlConnection conexao; private SqlCommand sql; private SqlDataAdapter ponte; private DataSet dataset; public DatabaseConnection(){ connectionString = ConfigurationManager.ConnectionStrings["Connection"].ConnectionString; conexao = new SqlConnection(connectionString); } public SqlConnection Open(){ if ((conexao.State == ConnectionState.Closed) || (conexao.State == ConnectionState.Broken)){ conexao.Open(); } return conexao; } public SqlConnection Close(){ if (conexao.State == ConnectionState.Open){ conexao.Close(); } return conexao; } public void SQL(string comando){ sql = new SqlCommand(comando, conexao); } public DataSet grid(string Binding){ ponte = new SqlDataAdapter(sql); dataset = new DataSet(); dataset.Reset(); ponte.Fill(dataset, Binding); return dataset; } } }
O código acima funciona, mas não sei se está implementado da melhor maneira possível.
Agora também tenho dúvidas sobre o modo que estou mostrando as consultas do banco.Por exemplo, tenho um DataGrid para exibir um SELECT no banco.
EmployerDataGrid.xaml:
<DataGrid x:Name="gridFuncionarios" ItemsSource="{Binding funcionario}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding nome}" Header="Nome" IsReadOnly="True" /> <DataGridTextColumn Binding="{Binding email}" Header="Email" IsReadOnly="True" /> </DataGrid.Columns> <DataGrid.RowDetailsTemplate> <DataTemplate> <Grid> <TextBlock Text="RG: "><TextBlock Text="{Binding rg}"/></TextBlock> <TextBlock Text="Data de Nascimento: "><TextBlock Text="{Binding data_nasc}"/></TextBlock> </Grid> </DataTemplate> </DataGrid.RowDetailsTemplate> </DataGrid>
EmployerDataGrid.xaml.cs
private void window_Loaded(){ try{ connection = new DatabaseConnection(); connection.Open(); connection.SQL("SELECT nome, email, rg, CONVERT(varchar(10), data_nasc, 103) as data_nasc FROM rh.funcionario"); gridFuncionarios.DataContext = connection.grid("funcionario"); } catch{ Application.Current.Shutdown(); } finally{ connection.Close(); } }
Está exibindo o SELECT, mas como falei, não sei se está implementado corretamento.
Agora a maior dúvida por enquanto, meu ComboBox.
EmployerComboBox.xaml:
<ComboBox x:Name="nomeComboBox" ItemsSource="{Binding funcionario}" DisplayMemberPath="nome">
EmployerComboBox.xaml.cs:
private void window_Loaded(){ try{ connection = new DatabaseConnection(); connection.Open(); connection.SQL("SELECT nome FROM rh.funcionario ORDER BY nome ASC"); nomeComboBox.DataContext = connection.grid("funcionario"); } catch{ Application.Current.Shutdown(); } finally{ connection.Close(); } }
O ComboBox lista os nomes. Como posso fazer para receber o nome do funcionário clicado dentro do ComboBox?
Estou usando Schemas no SQL (rh.funcionario), tenho que mudar alguma coisa no código?
Desde já agradeço muito.
Thiago Henrique Poiani
Todas as Respostas
-
Aki tem a solucao do teu problema, todo o teu codigo esta bacana, em relacao ao combobox voce precisar setar duas propiedades:
http://stackoverflow.com/questions/561166/binding-wpf-combobox-to-a-custom-list
A flower cannot blossom without sunshine, and man cannot live without love.