WPF - DataBinding com MySQL no SharpDevelop 4.0
Já faz algum tempo que eu não publico um artigo usando o SharpDevelop.
O SharpDevelop é uma IDE gratuita para desenvolvedores .NET, de custos mais brandos do que esta, e com suportes semelhantes. A solução impressiona principalmente pela velocidade com que permite a edição dos trabalhos. O que é interessante é que isso derruba alguns mitos de que .NET não possui um bom desempenho.
O SharpDevelop é uma excelente
ferramenta para auxiliar programadores a desenvolver aplicações
na plataforma Microsoft .NET de maneira ágil e descomplicada.
Além de uma interface leve e intuitiva, encontra-se
completamente em nosso idioma, o que facilita a criação de
projetos aos usuários inexperientes.
É uma ferramenta para profissionais
que gostam de estudar, pois seus códigos fonte são de fácil
assimilação, servindo perfeitamente como ponte para futuros
desenvolvimentos no próprio .NET. Isto é possível graças ao
amplo suporte de formatos para o qual foi projetado: C#,
VB.NET, Python, Ruby, Boo, C++, F# e ASP.NET MVC.
Dentre as características do SharpDevelop você pode contar com a conversão de linguagens (VB.NET para C# e vice-versa) oq ue pode te ajudar muito se você precisar migrar um projeto VB .NET para C# ou vice-versa.
Neste artigo eu resolvi criar uma aplicação WPF acessando o banco de dados MySQL.
Para acompanhar o artigo você deverá ter noções sobre WPF e MySQL e se esses assuntos são novos para você sugiro que leia os meus artigos nas referências.
A seguir a relação do que você precisa instalar para poder seguir este artigo passo a passo:
Definindo o Banco de dados no MySQL
Eu não vou mostrar todo o processo de criar um banco de dados e tabelas no MySQL (veja as referências sobre o assunto).
Usando o MySQL Administrator podemos ver na figura abaixo o banco de dados Cadastro e a tabela Clientes que serão usados no artigo:
Usando o MySQL Query Browser podemos ver os dados da tabela Clientes usando uma consulta MySQL conforme abaixo:
Podemos acessar o banco de dados Cadastro usando a seguinte string de conexão:
strcon = "server=127.0.0.1;uid=root;pwd=******;database=cadastro;"
Criando o projeto no SharpDevelop 4.0
Abra o SharpDevelop e no menu File selecione New -> Project;
Na janela New Project selecione o item C# -> WPF e a seguir o template WPF Application e informe o nome DataBinding_ShpDev e clique em Create;
Será criado o projeto conforme a figura abaixo, onde podemos ver as abas que permitem visualizar o código XAML e o Descritor WPF bem como a janela de Propriedades e as classes do projeto;
Vamos incluir uma referência ao assembly do MySQL.Data.dll.
Clique com o botão direito do mouse sobre o item References;
Na janela Add Reference selecione a guia - .NET Assembly Browser - e a seguir clique no botão Browse;
Em seguida selecione a pasta onde esta instalado o Connector do MySQL e selecione o assembly MySQL.Data.dll e clique em Abrir;
Pronto agora já temos as classes para acesso a dados para o MySQL da ADO .NET.
Vamos iniciar definindo o código que irá acessar o banco de dados Cadastro e a tabela Clientes no arquivo Window1.xaml.cs conforme abaixo:
O código acima extrai os dados do banco de dados Cadastro e preenche um DataTable usando a string de conexão e código ADO .NET.
Agora note a propriedade DataContext a qual atribuímos a nossa fonte de dados,no caso o DataTable dt.
O DataContext é uma propriedade existente em qualquer FrameWorkElement e que permite que os controles herdem, de seu parent, a fonte de dados.
Um DataContext pode ser ligado diretamente a um objeto CLR ou a um DataSource Provider. No nosso exemplo temos uma Window e esse Window possui alguns TextBox inseridos nele. Ao se definir que o DataContext do Window é por exemplo o DataTable , não é mais necessário indicar o DataContext dos demais TextBox. Eles, por estarem dentro da hierarquia do Window, entendem que devem herdar o DataContext de Window, caso outro não seja especificado.
Existem muitas formas de especificar
a sua fonte de vinculação de dados, ou seja, definir
qual a origem dos seus dados. A forma mais simples é instanciar o objeto origem como um recurso XAML e então definir a propriedade Source da vinculação para o recurso. Usar a propriedade Source é a forma mais simples. Porém, se múltiplas propriedades estão vinculadas a mesma origem, considera utilizar a propriedade DataContext. A propriedade DataContext fornece uma forma conveniente de estabelecer um escopo de dados quando você tem muitos controles e você quer vincular todos a mesma origem |
Vamos abrir o arquivo Window1.xml e definir uma interface bem simples onde iremos usar apenas os controles Label e TextBox conforme o leiaute abaixo:
?xml version="1.0" encoding="utf-8"?> <Window x:Class="DataBinding_ShpDev.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="DataBinding - MySQL e SharpDevelop 4" Background="#FFB9D1EA" Width="421" Height="219"> <Grid> <Panel.Background> <RadialGradientBrush /> </Panel.Background> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="75" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label>Id:</Label> <TextBox Text="{Binding Path=id}" Grid.Column="1" /> <Label Grid.Row="1">Nome:</Label> <TextBox Grid.Row="1" Text="{Binding nome}" Grid.Column="1" /> <Label Grid.Row="2">Email:</Label> <TextBox Grid.Row="2" Text="{Binding email}" Grid.Column="1" /> <Label Grid.Row="3">Cidade:</Label> <TextBox Grid.Row="3" Text="{Binding cidade}" Grid.Column="1" /> <Label Grid.Row="4">Idade:</Label> <TextBox Text="{Binding idade}" Grid.Row="4" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,3.33332650370721E-09,0,0" Height="44.666666663333345" Grid.Column="1" /> </Grid> </Window> |
O código a acima no
arquivo Window1.xaml é usado para mostrar o DataBinding
no WPF, onde temos que cada binding possui 4 componentes:
- um
objeto de destino (target object)
- uma propriedade de destino (a propriedade Text do TextBox)
- uma fonte de vinculação (binging source)
- um caminho para o valor na fonte de ligação (Neste artigo o
valor da propriedade Path é o nome do objeto de origem a ser
usado na ligação.
Agora temos que permitir a
navegação pelos dados. (Lembra do BindingNavigator ? )
No WPF podemos fazer a mesma coisa usando a classe CollectionView.
A classe CollectionView representa uma visão para agrupamento, ordenação, filtragem e navegação de uma coleção de dados.
Para criar uma visão para uma coleção que implementa IEnumeralbe, crie um objeto CollectionViewSource, inclua na sua coleção a propriedade Source e obtenha a visão da coleção através da propriedade View.
Você pode pensar na CollectionView
como uma camada na parte superior de uma vinculação de origem
que permite que você navegue e exiba a coleção com base na
classificação, filtro e agrupamento de consultas, tudo sem
precisar manipular a coleção de origem subjacentes.
Se a
coleção de origem implementa a interface INotifyCollectionChanged,
as alterações que disparam o evento CollectionChanged são propagadas para os visões.
Nas aplicações WPF todas as coleções tem uma visão de coleção padrão associada. Em vez trabalhar diretamente com a coleção, o mecanismo de ligação sempre acessa a coleção através de exibição associada. Para obter o modo de exibição padrão use o método CollectionViewSource.GetDefaultView.
Vamos então implementar esta funcionalidade em nosso código:
Primeiro vamos incluir dois controles Button a partir da ToolBox no Descritor XAML:
Após isso vamos abrir o arquivo Window1.xaml.cs e definir o código no evento Click de cada Botão para permitir a navegação:
Abaixo vemos as novas linhas de código que foram incluídas destacas em azul:
using System; using System.Collections.Generic; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Data; using MySql.Data.MySqlClient; namespace DataBinding_ShpDev { /// <summary> /// Interaction logic for Window1.xaml /// </summary> public partial class Window1 : Window { CollectionView visao; DataTable dt = new DataTable(); public Window1() { InitializeComponent(); DataTable dt = new DataTable(); //Define a string de conexão String connString = "server=127.0.0.1;uid=root;pwd=gpxpst;database=cadastro;"; //Define a consulta String query = "select id, nome, email, cidade, idade from clientes"; // Preenche o datatabela com os dados using (MySqlConnection conn = new MySqlConnection(connString)) { //passa a consulta e a connection String e cria o adapter MySqlDataAdapter da = new MySqlDataAdapter(query, conn); da.Fill(dt); } // define o DataCOntext DataContext = dt; visao = (CollectionView)CollectionViewSource.GetDefaultView(dt); } void button1_Click(object sender, RoutedEventArgs e) { visao.MoveCurrentToPrevious(); } void button2_Click(object sender, RoutedEventArgs e) { visao.MoveCurrentToNext(); } } } |
Executando o projeto teremos a janela WPF exibindo os dados da tabela Clientes do MySQL e permitindo a navegação conforme a figura a seguir:
Assim temos a utilização de ferramentas totalmente gratuitas como o SharpDevelop e MySQL permitindo a criação de uma aplicação WPF.
Antes de encerrar vou mostrar a característica de conversão entre as linguagens VB .NET e C# do SharpDevelop.
Abra o arquivo Window1.xaml.cs e vamos converter o código para VB .NET...
Selecione no menu Project a opção Convert e selecione a From C# to VB .NET:
Será criado um projeto com o mesmo nome do original acrescido de .Converted, onde poderemos espiar o código convertido para VB .NET:
E voilá, eis o nosso código C# convertido para VB .NET.
Simples , simples assim...
Pegue o projeto completo aqui: DataBinding_ShpDev.zip
Eu sei é apenas SharpDevelop e MySQL e WPF, mas eu gosto...
Referências: