Desenvolvendo uma aplicação com acesso a Bancos de Dados utilizando Mono e PostgreSQL (Parte 3)

Tiago Paranhos Lima

Programando nossa aplicação no Mono

Lembram da tabela linguagens_mono que foi criada no primeiro artigo?

Pois bem. Agora iremos então fazer com que, ao clicar no botão "Visualizar Registros" do formulário que desenvolvemos acima, o usuário de nossa aplicação possa visualizar todos os registros que temos cadastrados nessa tabela.

Uma vez que desenvolvemos, nos passos anteriores, a nossa interface, precisamos criar um programa C# que utilize a mesma. Nosso trabalho será associar os sinais que criamos anteriormente no Glade a um código que faça alguma coisa. No nosso caso, cada um dos 3 botões executará uma ação específica:

IMPORTANTE: Todos os sinais que você criou no Glade devem ser implementados em seu programa C#. Se você esquecer de atribuir código a algum sinal, o C# irá acusar um erro ao compilar seu programa. Portanto, se você tem um sinal no formulário Glade mas ainda não está certo sobre o que implementar nele, o ideal é que você inclua um método public para tratá-lo, mas deixe o corpo do método em branco. Exemplo:

public void on_BTNsobre_clicked (object sender, EventArgs a)
{
    //implementar aqui a chamada ao botão "Sobre".
} 

/*
 Teste de aplicação GTK# utilizando Glade e PostgreSQL
 Para compilar, utilize o comando abaixo:

 mcs GUIBD_Mono.cs -pkg:gtk-sharp -pkg:glade-sharp -pkg:gnome-sharp 
 -r System.Data.dll -r Npgsql.dll  /resource:posgui.glade
 */

using System;
using Gtk;
using Glade;
using Npgsql;
using Gnome;

public class GladeApp
{
        public static void Main (string[] args)
        {
                new GladeApp (args);
        }

        // Aqui se encontra a declaração de todos os
         // objetos contidos no projeto do Glade: 
        #region Glade
        //[Glade.Widget] Window window1;
        [Glade.Widget] VBox vbox1;
        [Glade.Widget] HBox hbox1;
        [Glade.Widget] Button BTNvisualizarRegistros;
        [Glade.Widget] Button BTNsobre;
        [Glade.Widget] Button BTNsair;
        [Glade.Widget] ScrolledWindow SCRWregistros;
        [Glade.Widget] TreeView treeview1;
        #endregion

        public GladeApp (string[] args)
        {
                Application.Init();

                Glade.XML gxml = new Glade.XML (null, "posgui.glade", "window1", null);
                gxml.Autoconnect (this);


                //Cria as colunas da nossa treeview, que será preenchida 
               ///com os registros da tabela PostgreSQL:
        treeview1.HeadersVisible = true;
        treeview1.AppendColumn ("Codigo", new CellRendererText (), "text", 0);
        treeview1.AppendColumn ("Descricao", new CellRendererText (), "text", 1);

                Application.Run();
        }

        /* Connect the Signals defined in Glade */
        public void OnWindowDeleteEvent (object o, DeleteEventArgs args)
        {
                Application.Quit ();
                args.RetVal = true;
        }

        //Aqui implementamos o código para tratamento d
        ///os sinais que definimos para os nossos widgets:

        //Esta função preenche a treeview com registros:
        public void on_BTNvisualizarRegistros_clicked (object sender, EventArgs a)
        {
           //PARTE 1 - CONECTANDO AO POSTGRESQL 
E RECUPERANDO OS RESULTADOS DA CONSULTA:
       //passa os dados para a conexão com o SGBD PostgreSQL:
       String strConexao = "Server=127.0.0.1;" +
                               "Port=5432;" +
                           "User Id=mono;" +
                            "Password=;" +
                           "Database=dbmonoteste;";      
       //cria a conexao
           NpgsqlConnection conexao = new  NpgsqlConnection(strConexao);
     
           //prepara o comando sql da consulta
           NpgsqlCommand comandoSql = 
           new NpgsqlCommand("select codigo,descricao from linguagens_mono",conexao);
     
           //abre a conexao e executa a consulta
           conexao.Open();
           NpgsqlDataReader dados = comandoSql.ExecuteReader();



           //PARTE 2 - MOSTRANDO OS DADOS NA TREEVIEW:
           //cria uma TreeStore, um objeto que irá
           // armazenar os registros que irão para o grid em uma espécie de lista:
           TreeStore store = null;         
           store = new TreeStore (typeof(string), typeof (string));

           /*
            Cria um TreeIter, um iterador para alimentar os dados da TreeStore criada 
             anteriormente
            com os registros recuperados pelo comando select no DataReader dados:
            */
           TreeIter iter = new TreeIter ();                     

           while (dados.Read()){
        string Cod = "" + dados["codigo"];
                string Desc = "" + dados["descricao"];
                iter = store.AppendValues (Cod, Desc);
           }

           /*
            O objeto TreeView implementa o modelo MVC - na linha abaixo é atribuído
             o Model (modelo) para
            a nossa treeview.
            O modelo que será atribuído será o objeto store, criado anteriormente:
            */
           treeview1.Model = store;
        }


        public void on_BTNsobre_clicked (object sender, EventArgs a)
        {
                //Cria um formulário "Sobre" ao clicar no botão de mesmo nome.
            string [] authors = { "Tiago Paranhos Lima" };

        new Gnome.About (
                "PosGUI", "1.0",
                "Copyleft GNU GPL 2004 Tiago Paranhos Lima",
                "GUI para visualizar registros de uma tabela PostgreSQL via C#/GTK#",
                authors, null, null, null).Run ();


        }

        public void on_BTNsair_clicked (object sender, EventArgs a)
        {
          Application.Quit ();
        }
}

Para compilar nosso código, basta utilizarmos:

mcs GUIBD_Mono.cs -pkg:gtk-sharp -pkg:glade-sharp -pkg:gnome-sharp -r System.Data.dll -r Npgsql.dll /resource:posgui.glade

E, finalmente, para executá-lo:

mono GUIBD_Mono.exe

Você Clique nos botões "Visualizar Registros" e "Sobre". Você verá então uma tela similar à seguinte:

E pronto! Construímos nossa primeira aplicação gráfica utilizando Mono, GTK#, C# e Glade. Num futuro artigo iremos desenvolver um pouco mais em cima deste exemplo, criando alguns formulários para acrescentar, editar e excluir registros. Até a próxima!

OBS.: A quem interessar, está disponível ainda um arquivo fonte em linguagem Boo, que provê a mesma funcionalidade. Para efetuar o download desse arquivo, clique aqui. Obrigado ao amigo Rogério Pereira Araújo por ter disponibilizado esta versão dos fontes. Mais informações sobre a linguagem Boo podem ser conseguidas aqui. Importante destacar que o criador dessa linguagem foi um brasileiro. ;-)

PostgreSQLBR: Parte3 Programando nossa aplicação no Mono (last edited 2006-10-31 15:12:19 by DiogoBiazus)