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
- Curso de ADO.NET e BDP - Parte I
- Curso de ADO.NET e BDP - Parte II
- Curso de ADO.NET e BDP - Parte III
- Curso de ADO.NET e BDP - Parte IV
- Curso de ADO.NET e BDP - Parte V
- Curso de ADO.NET e BDP - Parte VI
- Curso de ADO.NET e BDP - Parte VII
- Curso de ADO.NET e BDP - Parte VIII
- Curso de ADO.NET e BDP - Parte IX
- Curso de ADO.NET e BDP - Parte X
- Curso de ADO.NET e BDP - Parte XI
- Curso de ADO.NET e BDP - Parte XIII
- Curso de ADO.NET e BDP - Parte XIV
- Curso de ADO.NET e BDP - Parte XV
- Curso de ADO.NET e BDP - Parte XVI
- Curso de ADO.NET e BDP - Parte XVII
- Curso de ADO.NET e BDP - Parte XVIII
- Curso de ADO.NET e BDP - Parte XIX
- Curso de ADO.NET e BDP - Final