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:
- O botão "Sobre" irá abrir um novo formulário com informações sobre créditos e licença de nosso aplicativo.
- O botão "Sair" irá finalizar a execução de nosso aplicativo.
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.