Usando controles DataCombo e DataList
Os controles DataCombo e DataList são muito semelhantes aos controles padrão de caixa de listagem e caixa de combinação, mas possuem algumas diferenças importantes que os tornam extremamente adaptáveis e úteis em aplicativos de banco de dados. Ambos os controles podem ser preenchidos automaticamente pelos campos do banco de dados aos quais esses controles estão vinculados. Além disso, eles podem opcionalmente passar um campo selecionado para um segundo controle de dados, tornando-os adequados para a criação de aplicações de “tabela de consulta”.
Possível uso
1. Em um banco de dados relacional, use dados de uma tabela para fornecer valores a serem inseridos em uma segunda tabela (relacionada). Por exemplo, em um banco de dados de inventário, os nomes dos fornecedores são armazenados em uma tabela e cada fornecedor possui um identificador exclusivo. Outra tabela que mostra os produtos utiliza esses identificadores para indicar qual fornecedor fornece o produto. Você pode usar o controle DataList para exibir o nome do fornecedor enquanto fornece (invisivelmente) o identificador do fornecedor à tabela de produtos.
2. Permita que os usuários restrinjam sua pesquisa selecionando um critério em uma lista suspensa. Por exemplo, um aplicativo de banco de dados de relatórios de vendas poderia usar um controle DataList para permitir que o usuário selecione um estado ou uma região de vendas. Uma vez feita a seleção, a seleção é passada automaticamente para um segundo controle de dados, que é responsável por localizar os registros de vendas da área selecionada.
Assim como seus controles intrínsecos correspondentes, a principal diferença entre os controles DataList e DataCombo é que o controle DataCombo fornece uma caixa de texto na qual o conteúdo pode ser editado.
Para obter uma descrição da capacidade dos controles DataList e DataCombo de unir tabelas de banco de dados, consulte "Unindo duas tabelas usando os controles DataCombo e DataList". Para criar um aplicativo de banco de dados simples que usa tabelas vinculadas, consulte "Criando um aplicativo DataCombo simples".
Propriedades de controle notáveis
Algumas propriedades importantes dos controles DataList e DataCombo incluem:
Observe que a propriedade DataFormat do controle DataCombo é uma propriedade do Extender. Portanto, está sempre visível na folha de propriedades e pode ser definido em código. No entanto, o controle DataCombo formata apenas o item superior da lista. Isso pode ser menos importante para o usuário final que vê o item superior formatado e pode simplesmente selecionar na lista não formatada. Itens formatados também podem induzir os usuários finais a pensar que os itens são formatados antes de serem inseridos no banco de dados. Por esses motivos, é recomendável não definir a propriedade DataFormat ao usar o controle DataCombo.
Detalhes Para obter um tutorial passo a passo que demonstra o uso da propriedade BoundText, consulte "Criando um DataGrid com um controle DataList conectado". Para obter uma lista completa das propriedades e métodos desses controles, consulte "Controle DataList" e "Controle DataCombo".
Conecte duas tabelas usando controles DataCombo e DataList
A característica distintiva dos controles DataCombo e DataList é a capacidade de acessar duas tabelas diferentes e vincular dados da primeira tabela a um campo na segunda tabela. Isso é feito usando duas fontes de dados (como o controle ADOData ou o ambiente Data).
Tabelas relacionais e valores "hostis"
Em um banco de dados relacional, nem todas as informações para reutilização são armazenadas em vários locais. A maior parte dessas informações é armazenada em um conjunto de registros que consiste em vários campos. Entre esses campos está um campo "identificador" que identifica exclusivamente o conjunto de registros. Por exemplo, o banco de dados Biblio fornecido pelo Visual Basic armazena os nomes de diversas editoras em uma tabela chamada Publishers. Esta tabela inclui muitos campos, como endereço, cidade, CEP e número de telefone. Mas por uma questão de simplicidade, apenas os dois campos essenciais desta tabela, Nome e PubID, são considerados. O campo Nome armazena o nome de um editor, enquanto o campo PubID armazena um valor relativamente “hostil”, como um número ou código. Mas esse valor hostil é importante porque identifica de forma única o editor e serve como meio de vincular todo o conjunto de registros. Além disso, esse valor será armazenado em vários conjuntos de registros na segunda tabela.
O nome da segunda tabela é Títulos, e cada conjunto de registros contém informações incluindo título, ano de publicação, Número Padrão Internacional de Livro (ISBN), etc. O nome de um desses campos é PubID. O nome deste campo é igual ao campo correspondente da tabela Editoras, pois este campo armazena o valor que vincula este título a uma editora específica.
Esta possível solução apresenta um pequeno problema: dada uma aplicação de banco de dados que permite aos usuários inserir novos títulos, o usuário deve de alguma forma inserir um número inteiro que identifique a editora. Se o usuário conseguir lembrar o identificador exclusivo de cada editor, então ainda é viável, mas se por um lado o usuário puder ver o nome do editor e, por outro lado, o valor correspondente estiver armazenado no banco de dados, então ele parecerá mais conveniente. Os controles DataList e DataCombo podem resolver esse problema facilmente.
Duas fontes de dados, três campos, sem codificação
Os controles DataList e DataCombo usam duas fontes de dados para resolver esse problema. Embora exiba apenas o nome do editor (da tabela Editores), o controle DataList ou DataCombo grava apenas o valor do campo PubID na tabela Títulos. Através da janela Propriedades, defina RowSource como a fonte de dados que fornece os dados a serem gravados (ou seja, a tabela Publishers). Em seguida, defina a propriedade DataSource para a fonte de dados onde os dados serão gravados (ou seja, a tabela Títulos). Por fim, defina as propriedades DataField, ListField e BoundColumn. A figura a seguir demonstra como atribuir duas fontes de dados (na forma de dois controles Data) e três campos a um controle DataCombo:
Resumidamente, a propriedade ListField determina qual campo será exibido pelo controle. Neste caso é o nome do editor. Por outro lado, a propriedade BoundColumn determina qual campo na tabela Editores fornece o valor real necessário para a tabela Título. Observe que o campo PubID na tabela Editores não pode (e não deve) ser editado. Em vez disso, o valor no campo PubID é gravado no campo especificado pela propriedade DataField. Neste exemplo, este atributo é o campo PubID na tabela Títulos.
A tabela a seguir fornece uma visão geral dessas propriedades e como usá-las.
Observe que os controles DataList e DataCombo também podem ser usados com um único controle de dados. Para conseguir isso, você pode definir as propriedades DataSource e RowSource para o mesmo controle de dados e definir as propriedades DataField e BoundColumn para o mesmo campo no conjunto de registros do controle de dados. Neste caso, a lista será preenchida com valores ListField do mesmo conjunto de registros que está sendo atualizado. Se uma propriedade ListField for especificada, mas a propriedade BoundColumn não estiver definida, BoundColumn será automaticamente definido para o campo ListField.
Detalhes Se desejar criar um aplicativo de banco de dados simples passo a passo usando o controle DataCombo, consulte "Criando um aplicativo DataCombo simples".
->