Vous êtes sur la page 1sur 7

Tpico III Componente de Lookup

O Lookup um componente que possibilita realizar a busca de um determinado


registro existente em outra tabela de maneira rpida e fcil. Sendo possvel encontrar
um registro apenas informando o cdigo ou fazendo uma busca detalhada pelas
colunas principais que descrevem as informaes do Lookup.
Possui dois TextBox e um Boto. O primeiro TextBox disponibiliza o cdigo principal do
Lookup, por exemplo o cdigo principal de um Lookup de Filial seria o Cdigo da Filial.
O segundo TextBox mostra a descrio do cdigo selecionado.

Ao se clicar no boto aberta uma janela de viso de Lookup, que diferente da viso
convencional, sendo mais simples e possuindo menos colunas em sua Grid. Nesta viso
possvel fazer uma busca no banco por diversas colunas que so disponibilizadas pelo
desenvolvedor.

Quando informada a fonte de dados informada uma Action, possvel nesta viso
editar ou inserir um registro. Estas aes iro abrir o Form de edio da Action de
Lookup.
Tambm possvel editar o registro selecionado diretamente do componente, onde
exibido um hyperlink na descrio do item. Este hyperlink abre a tela de edio da
Action de Lookup.

Utilizao de um Lookup

Para utilizao deste componente so necessrios dois passos bsicos:


1. Fonte de dados:
onde ser feita a consulta dos da lista de itens disponveis para seleo e das
descries dos mesmos. O Lookup aceita que uma fonte de dados seja uma Action ou,
um DataServer, ou DataTable.
Utilizando uma Action: a fonte de dados mais utilizada. Deve-se informar o nome da
ActionView que representa o Lookup. O Lookup utiliza esta Action para executar os
mtodos de acesso a dados de seu DataServer associado.
Utilizando um DataServer: Pode-se informar apenas o nome do DataServer de onde
sero buscados os dados. A diferena entre informar uma Action e um DataServer
que informando apenas o DataServer no possvel Inserir, Editar ou Excluir um
registro diretamente atravs da viso de Lookup da Action ou do componente de
Lookup.
Utilizando um DataTable: Os itens a serem pesquisados tambm podem ser informados
em formado de DataTable, onde o Lookup far uma pesquisa diretamente nas colunas
deste DataTable.
Quando utilizamos uma Action ou um DataServer, no DataServer devem ser
sobrescritos os mtodos virtuais DoReadLookupView e DoReadLookupValues do
DataServer.
O DoReadLookupView retorna a lista de itens que sero exibidos no Form de viso
do Lookup. O cdigo bem similar ao DoReadView, onde devem ser retornadas apenas
as colunas que fazem sentido para um Lookup.
Ex:
protected override void DoReadLookupView(DataSet dataSet, object[]
filter, object ownerData)
{

this.DBS.QueryFill(dataSet, "GFilial",
@"SELECT CODCOLIGADA, CODFILIAL, NOMEFANTASIA
FROM GFILIAL /*where*/", 0, 0, filter);

}
O DoReadLookupValues deve retornar um NICO item. Este mtodo retorna os
valores desejados para um registro. Este registro filtrado atravs o objeto Filter que
deve ser concatenado na clausula WHERE. Os ResultFields so as colunas que devem
ser retornadas para o componente de Lookup. Este parmetro deve ser concatenado a
sentena SQL, j possuindo o formato correto para obteno dos campos.
Ex:
protected override void DoReadLookupValues(DataSet dataSet, string
resultFields, object[] filter, object ownerData)
{
this.DBS.QueryFill(dataSet, "GFilial",
"SELECT "+ resultFields +" FROM GFILIAL /*where*/", 0, 0, filter);
}

2. Componente Lookup
Uma vez que j se tem o local que ser feita a busca dos dados possvel fazer um
Lookup. O componente RMSLookup est disponvel na ToolBox de itens disponibilizados
pela RM.Lib.Winforms.
Uma vez adicionado o componente deve ser feitas configuraes para realizar o Bind
entre as colunas do BindingSource com as colunas da fonte de dados do Lookup.
Estas configuraes so feitas atravs do preenchimento de propriedades no
componente de Lookup. Abaixo ser feita uma descrio de cada uma das
propriedades necessrias.
Action: Nome da Action que ser realizado o
Lookup para retornar os dados.
Active: Se o Lookup est ativo.
AllowClear: Se permite que o componente de
lookup seja limpo, uma vez que existe um valor.
AllowEdit: Se possvel editar o registro
relacionado ao Lookup.
AllowInsert: Se possvel inserir um novo registro
na viso do Lookup.
AutoLoadView: Se alterado para True ao se abrir a
Viso do Lookup sero exibidos todos os registros
do Lookup sem precisar de realizar um filtro. Esta
opo deve ser utilizada apenas para Lookup que
retornam poucos registros.
BindingSource: Componente BindingSource que
ser feito um Bind com suas colunas relacionadas ao
Lookup.
ButtonVisible: Torna visvel/invisvel o boto de abrir Viso de Lookup.
DataServer: Nome do DataServer que ser utilizado para retornar os dados do
Lookup.
DataTable: DataTable que ser utilizado para retornar os dados do Lookup.
EnableAutoFilter: Habilita o filtro automtico da viso pela chave. Isto , quando
feita a procura na viso do Lookup adicionado automaticamente o filtro que os outros
campos da chave j possuem. Ex, um Lookup que seja CODCOLIGADA;CODFILIAL,
ao se abrir a viso j ser feito um filtro para exibir somente as filiais da coligada
informada.

EnableHyperLink: Se desabilitado o hyperlink que abre a edio de um lookup


quando clicada na descrio de um item no apresentado.
Filter: Filtro do Lookup. Adiciona este filtro ao selecionar registros na viso do Lookup.
FormatFromMetaData: Permite/Desabilita a formatao do Lookup e preenchimento
de suas propriedades atravs dos DataProps.
Label: Objeto Label do Lookup
KeyFields: Chave de campos da tabela do cadastro.
Ex: "CODCOLIGADA;CODPRODUTO"
LookupKeyFields: Chave dos campos da tabela do Lookup.
Ex: "CODCOLIGADA;CODIGO"
LookupField: Campo que ser apresentado como descrio do Lookup. O valor
considerado como ultimo campo da propriedade KeyField.
Ex: "NOME"
LookupResultFields: Todos os campos que devem ter seus valores retornados pelo
Lookup. Os campos informados nas propriedades LookupKeyField e LookupDisplayField
devem ser adicionados. Estes campos podem ser acessados pela funo do Lookup
GetLookupResultData do prprio Lookup.
Ex: "CODCOLIGADA;CODIGO;NOME;TIPO"

BindingSource Binding do Lookup


O Binding do Lookup feito pelo componente utilizando o BindingSource informado e
os campos informados na propriedade KeyFields. Geralmente o BindingSource
ligado a um DataSet ou DataTable. Para este caso, o BindingSource deve conter uma
Row ou estar em modo de insero de uma nova Row.
Tambm existe a possibilidade do BindingSource ser ligado a uma Classe, onde as
propriedades desta classe exercem a funo das colunas. Para se capturar a descrio
do Lookup em um DataSet/DataTable so utilizado os DataProps. Para uma Classe no
existe DataProps, ento deve ser informado para dada propriedade uma descrio
utilizando o atributo Description.
Ex:
[Description("Cdigo do Lookup")]
public int Codigo
{
get { return _codigo; }
set { _codigo = value; }
} private int _codigo = 0;

Deve ser lembrar tambm que quando o BindingSource ligado a uma classe no
possvel atribuir NULL a um valor do tipo INT por exemplo. O Lookup deve ser
preenchido.

Criando uma Action de Lookup


Neste exemplo iremos mostrar como fazer um Lookup que carregar dados de
uma Action.
1. Abra a soluo DemoRMSLookup.sln. Nela sero encontrado quatro projetos,
que so: RM.Dem.Lookup.Data, RM.Dem.Lookup.Form, RM.Dem.Lookup.Intf e
RM.Demo.Lookup.Execute.
2. Vamos criar primeiro um cadastro simples que ser o nosso Lookup. Abra o
projeto RM.Dem.Lookup.Data.
3. Neste projeto abra o DataServer DemFilialData.cs. Este DataServer apenas
est implementando os mtodos para leitura da viso e leitura de um registro.
4. Sobrescreva o mtodo DoReadLookupView. Neste mtodo deve ser retornada
a lista de registros da tabela do Lookup que sero exibidas na janela de Viso
do Lookup. O nosso LookupDemo retornar as Filiais.
5. Retorne a tabela de filial, lembrando de concatenar o filtro recebido por
parmetro. com este filtro que feito a procura por registros.
Ex:
this.DBS.QueryFill(dataSet, "GFilial",
@"SELECT CODCOLIGADA, CODFILIAL, NOMEFANTASIA
FROM GFILIAL /*where*/", 0, 0, filter);
Obs: Quando for feito o DoReadLookupView deve se retornar todas as colunas
chaves para que o Lookup funcione corretamente.
6. Sobrescreva o mtodo DoReadLookupValues. Neste mtodo ser retornado
um nico registro que ser filtrado atravs do filtro passado como parmetro.
As colunas retornadas tambm j so informadas pelo parmetro resultFields
que deve ser concatenada a String de Select.
Ex:
this.DBS.QueryFill(dataSet, "GFilial", "SELECT "+ resultFields +"
FROM GFILIAL /*where*/", 0, 0, filter);

Apenas informando estes mtodos o DataServer para o Lookup Demo de Filial j


est completo. O projeto RM.Dem.Lookup.Form j possui a Action que est
associa este DataServer. Vamos agora ao Form de edio Demo adicionar um

componente de Lookup que faa referncia a esta Action/DataServer que editamos


acima.
1. Abra o projeto RM.Dem.Lookup.Form. Este projeto possui duas Actions e dois
Forms. A Action e Form do Lookup Demo de Filial e a Action e Form para
teste do Demo.
2. Abra o Form DemLookupForm.cs. Neste formulrio j existe um componente
de Lookup adicionado e configurado que para Coligada. Abaixo dele existe um
espao em branco. Adicione neste espao um novo RMSLookup que se
encontra na paleta ToolBox.

3. Para configurar este Lookup ser necessrio informar as propriedades:


- Action: DemFilialAction
- BindingSource: bindingSource
- KeyFields: CODCOLIGADA;CODFILIAL
- LookupField: NOME
- LookupKeyFields: CODCOLIGADA;CODFILIAL
- LookupResultFields: CODCOLIGADA;CODFILIAL;NOME
4. Note que automaticamente o Label j foi setado como Cod. Filial, que foi
buscado automaticamente atreves dos DataProps.
5. Rode a soluo e verifique os resultados.

Mtodos/Funes Avanadas do Lookup


- BeforeLookup

O componente de Lookup possui dois eventos que so o BeforeLookup e o AfterLookup


que so chamados antes e depois de ser feita uma busca por valores no Lookup. No
evento BeforeLookup possvel definir filtros adicionais dependendo da regra de
negcio.

Ex:
private void rmsLookupServerFilial_BeforeLookup(object sender,
BeforeLookupEventArgs e)
{
// adiciona a coligada global
e.ColumnValues["CODCOLIGADA"].Add(0);
}
Neste caso, supondo que o valor de CODCOLIGADA no registro corrente seja igual a 1,
o Lookup ir gerar o filtro da seguinte forma: (CODCOLIGADA = 1 OR CODCOLIGADA
= 0), porque foi adicionado mais um valor 0 na lista de valores para o campo
CODCOLIGADA.
Tambm no evento BeforeLookup possvel passar o parmetro OwnerData para o
DataServer utilizando o EventArgs BeforeLookupEventArgs.

- SetLookUpValues
O mtodo do Lookup SetLookupValues permite que sejam alterados os valores que
compe a chave do Lookup.
Ex:
private void AlteraValor()
{
int codColigada = 1;
int codFilial = 2;
cCODFILIAL.SetLookupValues(codColigada, codFilial);
}
- GetLookupResultData
Com mtodo do Lookup GetLookupResultData possvel recuperar o valor de uma
coluna qualquer que foi informada no LookupResultFields. Quando um registro
selecionado no Lookup o componente automaticamente atualiza o valor do
BindingSource com os valores chaves do Lookup. Para acessar os outros valores
retornados pelo ResultFields utiliza-se esta funo.
Ex.: string nomeFilial = cCODFILIAL.GetLookupResultData("NOMEFANTASIA");

Vous aimerez peut-être aussi