Curso de ADO.NET e BDP - Parte XI

Acesso a dados no Delphi 8 for .NET

 

Parte XI– DataBindings

Nesta parte do curso conheceremos o poderoso mecanismo de DataBindings do .NET Framework, que permite exibir dados em controles de tela

Onde estão os Data Controls no .NET?

Na VCL do Delphi, sempre que precisamos exibir dados de um BD fazemos uso dos famosos controles Data-Aware. Ou seja, se você quer exibir dados de um DataSet em um Edit, por exemplo, deve usar sua versão Data-Aware, o DBEdit.

Isso exige que cada componente que precise exibir informações de um BD precise ter uma versão Data-Aware, o que é conseguido implementando-se DataLinks internos.

No .NET Framework, é possível vincular um controle de tela a uma fonte de dados usando o recurso de DataBindings. Isso difere um pouco da VCL, pelo fato que você usará os mesmos controles “não Data-Aware” do Windows Forms também em uma aplicação de BD. Basta configurar sua propriedade DataBingings para que o controle passe a reconhecer dados. Uma outra vantagem é que esse comportamento é definido na classe Control do Windows Forms, ou seja, todos os controles de tela (Button, TextBox, Label etc.) podem fazer Binding de dados, não é necessário criar ou usar classes específicas.

Configurando o formulário e acesso a dados

Inicie uma nova aplicação do tipo Windows Forms Application. Expanda a conexão Employee no Data Explorer e arraste a tabela Employee para o designer. Isso cria um BdpConnection e um BdpDataAdapter. Coloque um DataSet e aponte a propriedade DataSet do BdpDataAdapter para esse componente.

Coloque agora no formulário os seguintes componentes, conforme mostrado no formulário a seguir (os componentes utilizados são: DataGrid, Buttoi, TextBox, TabControl - com três TabPages, ProgressBar, Trackbar, RadioButton, Label, CheckBox, GroupBox, LixtBox e StatusBar):

 

 

DataBinding

Suponha agora que você queira exibir no TextBox o valor para o campo FIRST_NAME do DataTable EMPLOYEE. Para isso, basta apontar a propriedade DataBindings.Text como mostrado a seguir:

 

 

Também podemos criar o relacionamento em tempo de execução, como fiz aqui no evento Click do botão Testar DataBinding :

 

procedure TWinForm.Button2_Click(sender: System.Object; e:System.EventArgs);

const

    StrArray: array [0..4] of string =

('Guinther','Rudolfo','Corbin','Gladstone','Pimenta');

begin

    DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    Button3.DataBindings.Add(

       binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    TextBox1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    StatusBar1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    Label1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    RadioButton1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    CheckBox1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    TabPage1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    GroupBox1.DataBindings.Add(

        binding.Create('Text',DataSet1.Tables[0],'FULL_NAME'));

    DataGrid1.DataBindings.Add(

        binding.Create('CaptionText',DataSet1.Tables[0],'FULL_NAME'));

    ProgressBar1.DataBindings.Add(

        binding.Create('Value',DataSet1.Tables[0],'EMP_NO'));

    TrackBar1.DataBindings.Add(

        binding.Create('Value',DataSet1.Tables[0],'EMP_NO'));

    { data binding de um array para um ListBox }

    ListBox1.DataSource := StrArray;

end;

 

Aqui chamamos o método Add da propriedade DataBindings de cada controle, passando como parâmetro o nome da propriedade onde o valor deve ser mostrado e de qual datasource deve ser obtido. Observe aqui uma grande vantagem dessa abordagem: você pode fazer o Binding de um valor para mais de uma propriedade de um mesmo componente. Por exemplo, observe que fiz o Binding do valor do campo EMP_NO do DataTable para a propriedade Value do TrackBar. Na VCL, geralmente o valor é exibido no texto do controle. Aqui não temos essa limitação. Os botões “<” e “>” fazem a navegação entre os registros, para que você possa ver os valores mudando nos controles que fizemos o DataBinding:

 

procedure TWinForm.Button5_Click(sender: System.Object; e:System.EventArgs);

begin

    with BindingContext.Item[DataSet1.Tables[0],''] do

    Position := Position + 1;

end;

 

procedure TWinForm.Button4_Click(sender: System.Object; e:System.EventArgs);

begin

    with BindingContext.Item[DataSet1.Tables[0],''] do

    Position := Position - 1;

end;

 

Observe o DataBinding em ação na tela abaixo, onde exibimos valores do DataTable nos mais variados tipos de componentes:

 

 

Observe ainda uma outra vantagem do DataBinding : os dados não precisam necessariamente virem de um DataSet / DataTable . Veja que no ListBox estou exibindo alguns nomes, que não vieram do DataTable em questão. Isso foi conseguido fazendo o Binding do controle para um Array (isso mesmo!), conforme mostrado no código a seguir:

 

const

  StrArray: array [0..4] of string=('Guinther','Rudolfo','Corbin','Gladstone','Pimenta');

begin

...

ListBox1.DataSource := StrArray;

Download

Você pode fazer download de todos os exemplos deste curso de acesso a dados no Delphi 8 com ADO.NET e BDP a partir do endereço http://cc.borland.com/cc/ccweb.exe/author?authorid=222668

Leia todos artigos da série