none
Dúvidas envolvendo SQL Server, ComboBox e DataGrid RRS feed

  • 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

    segunda-feira, 29 de outubro de 2012 20:04

Todas as Respostas