Curso de ADO.NET e BDP - Parte XII

Acesso a dados no Delphi 8 for .NET

 

Parte XII– CurrencyManager

O CurrencyManager  é usado para gerenciar uma lista de objetos que usam DataBinding. Ele pode controlar o posicionamento de um DataView (lembre- se que um DataTable não possui o conceito de "registro atual"), permitindo que controles em tela podem ser sincronizados para exibirem sempre os dados de um mesmo registro. Para obter um CurrencyManager, use o BindContext (uma coleção de BindingManagerBase, que é classe base de CurrencyManager) passando como parâmetro o nome do DataSource.

Neste artigo veremos operações típicas com o CurrencyManager, como navegação e manipulação de dados.

Configurando os componentes do BDP

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

Coloque no formulário três Labels, três TextBoxes, dez Buttons, um ErrorProvider e um StatusBar. Ajuste os componentes no formulário conforme mostrado na figura a seguir:

 

 

Configure a propriedade DataBindings dos TextBoxes para apontarem para os campos EMP_NO, FIRST_NAME e LAST_NAME do DataTable1, respectivamente.

Usando o CurrencyManager

Declare o seguinte na seção private do formulário:

 

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):

 

private

  CM: CurrencyManager;

  procedure CMPositionChanged(Sender: &object; E: EventArgs);

 

Implemente o método anterior da seguinte forma:

 

procedure TWinForm.CMPositionChanged(Sender: &object; E: EventArgs);

var

    n: integer;

begin

    btFirst.Enabled := CM.Position > 0;

    btPrior.Enabled := CM.Position > 0;

    btNext.Enabled := CM.Position < CM.Count - 1;

    btLast.Enabled := CM.Position < CM.Count - 1;

    n := CM.Count - 1;

    StatusBar1.Text := CM.Position.ToString + ' de ' + n.ToString;

end;

 

Esse método será disparado quando a posição de um registro em tela for modificada. De acordo com a posição, configuramos quais botões de navegação permanecerão habilitados. Para isso, usamos a propriedade Position de CM (CurrencyManager). A variável CM é inicializada no evento Load do formulário:

 

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

begin

  // obtém o CurrencManager para o DataView DataTable1

  CM := Self.BindingContext.Item[dataSet1.Tables['EMPLOYEE']] as CurrencyManager;

  Include(CM.PositionChanged,CMPositionChanged);

  CMPositionChanged(nil,nil);

end;

 

Veja a seguir o código que deve ser colocado para cada um dos botões da barra de navegação, na ordem. O que fazemos basicamente é chamar os métodos do CM (CurrencyManager):

 

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

begin

   CM.Position := 0;

end;

 

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

begin

   CM.Position := CM.Position - 1;

end;

 

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

begin

   CM.Position := CM.Position + 1;

end;

 

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

begin

   CM.Position := CM.Count - 1;

end;

 

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

begin

   CM.CancelCurrentEdit;

end;

 

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

begin

    CM.EndCurrentEdit;

end;

 

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

begin

   CM.RemoveAt(CM.Position);

end;

 

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

begin

   CM.AddNew;

end;

 

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

begin

   CM.Refresh;

end;

 

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

begin

   BdpDataAdapter1.AutoUpdate;

end

 

Execute a aplicação e veja o resultado na figura a seguir:

 

 

Validações

Um recurso bastante interessante que vou mostrar aqui, não relacionando diretamente ao Currencymanager (mas que merece destaque), é o uso do componente ErrorProvider do .NET. Para entender como ele funciona, nada melhor do que conhece-lo em uma aplicação prática.

Selecione o TextBox que representa o campo FIRST_NAME e no seu evento Validating digite o seguinte:

 

procedure TWinForm.TextBox2_Validating(sender: System.Object; e: System.ComponentModel.CancelEventArgs);

begin

     if tbFirstName.Text = '' then

     begin

        ErrorProvider1.SetError(tbFirstName,'First Name não pode ficar em branco!');

        e.Cancel := True;

      end

      else

        ErrorProvider1.SetError(tbFirstName,'');

end;

 

Isso valida a entrada no campo, de forma que ele deve ser sempre preenchido (obrigatório). Execute a aplicação e insira um registro, mantendo esse campo em branco. Veja o resultado:

 

 

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