Vinculação de objeto no Visual Studio
Visual Studio fornece ferramentas em tempo de design para trabalhar com objetos personalizados (ao contrário de outras fontes de dados como, por exemplo, entidades, conjuntos de dados e serviços) como fonte de dados em seu aplicativo.
Requisitos do objeto
O único requisito de objetos personalizados para trabalharem com as ferramentas de design de dados no Visual Studio é que o objeto precisa pelo menos de uma propriedade public.
Geralmente, objetos personalizados não requerem qualquer interfaces específicas, atributos, para atuar como uma fonte de dados para um aplicativo ou construtores. No entanto, se você deseja arrastar o objeto a partir de Fontes de dados janela para uma superfície de design para criar um controle vinculado a dados, e se o objeto implementa o ITypedList ou IListSource interface, o objeto deve ter um construtor padrão (ou seja, um construtor sem parâmetros). Caso contrário, o Visual Studio não é possível instanciar o objeto de origem de dados e exibirá um erro quando você arrastar o item para a superfície de design.
Exemplos de uso de objetos personalizados como fontes de dados
Enquanto houver incontáveis maneiras de implementar a lógica de aplicativo ao trabalhar com objetos como uma fonte de dados, há poucas operações padrões que podem ser simplificadas usando os gerados do Visual Studio TableAdapter objetos. Esta página explica como implementar esses processos padrões usando TableAdapters; ela não se destina a ser um guia de criação de seus objetos personalizados. Por exemplo, você irá normalmente executar as seguintes operações padrões independentemente da implementação específica de seus objetos, ou lógica do aplicativo:
Carregando dados em objetos (normalmente a partir de um banco de dados).
Criando uma coleção tipada de objetos.
Adicionando objetos e removendo objetos de uma coleção.
Exibindo os dados do objeto aos usuários em um formulário.
A alteração/edição de dados em um objeto.
Salvando dados a partir de objetos no banco de dados.
Observação |
---|
Para entender melhor e fornecer contexto para os exemplos nesta página, sugerimos que você conclua o seguinte: Demonstra Passo a passo: Conectando a dados em objetos (Windows Forms). Esta explicação passo a passo cria os objetos discutidos nesta página de ajuda. |
Carregando dados em objetos
Para esse exemplo, você carrega dados para os objetos usando TableAdapters. Por padrão, TableAdapters são criados com dois tipos de métodos que buscam dados de um banco de dados e preenchem tabelas de dados.
The TableAdapter.Fill method fills an existing data table with the data returned.
The TableAdapter.GetData method returns a new data table populated with data.
The easiest way to load your custom objects with data is to call the TableAdapter.GetData method, loop through the collection of rows in the returned data table, and populate each object with the values in each row. You can create a GetData method that returns a populated data table for any query added to a TableAdapter.
Observação |
---|
Visual Studio names the TableAdapter queries Fill and GetData by default, but those names can be changed to any valid method name. |
O exemplo a seguir mostra como percorrer as linhas de uma tabela de dados e preencher um objeto com dados:
For a complete code example, see Demonstra Passo a passo: Conectando a dados em objetos (Windows Forms).
Private Sub LoadCustomers()
Dim customerData As NorthwindDataSet.CustomersDataTable =
CustomersTableAdapter1.GetTop5Customers()
Dim customerRow As NorthwindDataSet.CustomersRow
For Each customerRow In customerData
Dim currentCustomer As New Customer()
With currentCustomer
.CustomerID = customerRow.CustomerID
.CompanyName = customerRow.CompanyName
If Not customerRow.IsAddressNull Then
.Address = customerRow.Address
End If
If Not customerRow.IsCityNull Then
.City = customerRow.City
End If
If Not customerRow.IsContactNameNull Then
.ContactName = customerRow.ContactName
End If
If Not customerRow.IsContactTitleNull Then
.ContactTitle = customerRow.ContactTitle
End If
If Not customerRow.IsCountryNull Then
.Country = customerRow.Country
End If
If Not customerRow.IsFaxNull Then
.Fax = customerRow.Fax
End If
If Not customerRow.IsPhoneNull Then
.Phone = customerRow.Phone
End If
If Not customerRow.IsPostalCodeNull Then
.PostalCode = customerRow.PostalCode
End If
If Not customerRow.Is_RegionNull Then
.Region = customerRow._Region
End If
End With
LoadOrders(currentCustomer)
CustomerBindingSource.Add(currentCustomer)
Next
End Sub
private void LoadCustomers()
{
NorthwindDataSet.CustomersDataTable customerData =
customersTableAdapter1.GetTop5Customers();
foreach (NorthwindDataSet.CustomersRow customerRow in customerData)
{
Customer currentCustomer = new Customer();
currentCustomer.CustomerID = customerRow.CustomerID;
currentCustomer.CompanyName = customerRow.CompanyName;
if (customerRow.IsAddressNull() == false)
{
currentCustomer.Address = customerRow.Address;
}
if (customerRow.IsCityNull() == false)
{
currentCustomer.City = customerRow.City;
}
if (customerRow.IsContactNameNull() == false)
{
currentCustomer.ContactName = customerRow.ContactName;
}
if (customerRow.IsContactTitleNull() == false)
{
currentCustomer.ContactTitle = customerRow.ContactTitle;
}
if (customerRow.IsCountryNull() == false)
{
currentCustomer.Country = customerRow.Country;
}
if (customerRow.IsFaxNull() == false)
{
currentCustomer.Fax = customerRow.Fax;
}
if (customerRow.IsPhoneNull() == false)
{
currentCustomer.Phone = customerRow.Phone;
}
if (customerRow.IsPostalCodeNull() == false)
{
currentCustomer.PostalCode = customerRow.PostalCode;
}
if (customerRow.IsRegionNull() == false)
{
currentCustomer.Region = customerRow.Region;
}
LoadOrders(currentCustomer);
customerBindingSource.Add(currentCustomer);
}
}
Criando uma coleção tipada de objetos
You can create collection classes for your objects or use the typed collections that are automatically provided by the O Componente BindingSource.
When you are creating a custom collection class for objects, we suggest that you inherit from BindingList<T>. Essa classe genérica fornece funcionalidade para administrar sua coleção, bem como a capacidade de evocar eventos que enviam notificações para a infraestrutura de vinculação de dados no Windows Forms.
The automatically-generated collection in the BindingSource uses a BindingList<T> for its typed collection. If your application does not require additional functionality, then you can maintain your collection within the BindingSource. For more information, see the List property of the BindingSource class.
Observação |
---|
If your collection will require functionality not provided by the base implementation of the BindingList<T>, then you should create a custom collection so you can add to the class as needed. |
The following code shows how to create the class for a strongly-typed collection of Order objects:
''' <summary>
''' A collection of Orders
''' </summary>
Public Class Orders
Inherits System.ComponentModel.BindingList(Of Order)
' Add any additional functionality required by your collection.
End Class
/// <summary>
/// A collection of Orders
/// </summary>
public class Orders: System.ComponentModel.BindingList<Order>
{
// Add any additional functionality required by your collection.
}
Adicionando objetos a uma coleção
You add objects to a collection by calling the Add method of your custom collection class or of the BindingSource.
For an example of adding to a collection using a BindingSource, see the LoadCustomers method in Demonstra Passo a passo: Conectando a dados em objetos (Windows Forms).
For an example of adding objects to a custom collection, see the LoadOrders method in Demonstra Passo a passo: Conectando a dados em objetos (Windows Forms).
Observação |
---|
The Add method is automatically provided for your custom collection when you inherit from BindingList<T>. |
The following code shows how to add objects to the typed collection in a BindingSource:
Dim currentCustomer As New Customer()
CustomerBindingSource.Add(currentCustomer)
Customer currentCustomer = new Customer();
customerBindingSource.Add(currentCustomer);
The following code shows how to add objects to a typed collection that inherits from BindingList<T>:
Observação |
---|
In this example the Orders collection is a property of the Customer object. |
Dim currentOrder As New Order()
currentCustomer.Orders.Add(currentOrder)
Order currentOrder = new Order();
currentCustomer.Orders.Add(currentOrder);
Removendo objetos de uma coleção
You remove objects from a collection by calling the Remove or RemoveAt method of your custom collection class or of BindingSource.
Observação |
---|
The Remove and RemoveAt methods are automatically provided for your custom collection when you inherit from BindingList<T>. |
The following code shows how to locate and remove objects from the typed collection in a BindingSource with the RemoveAt method:
Dim customerIndex As Integer = CustomerBindingSource.Find("CustomerID", "ALFKI")
CustomerBindingSource.RemoveAt(customerIndex)
int customerIndex = customerBindingSource.Find("CustomerID", "ALFKI");
customerBindingSource.RemoveAt(customerIndex);
Exibindo dados de objeto aos usuários
To display the data in objects to users, you create an object data source using the Assistente de Configuração de Fonte de Dados, and then drag the entire object or individual properties onto your form from the Data Sources window.
For more information on creating an object data source, see Como: Conectar-se a dados em objetos.
For more information on displaying data from objects on Windows Forms, see Controles de vinculação de dados de Visual Studio.
Modificando os dados nos objetos
Para editar dados em objetos personalizados que são vinculados a dados para controles Windows Forms, basta editar os dados no controle acoplado (ou diretamente nas propriedades do objeto). A arquitetura de vinculação de dados irá atualizar os dados no objeto.
Se seu aplicativo requerer o rastreamento de alterações e recuo nas alterações propostas para seus valores originais, então você deve implementar essa funcionalidade no seu modelo de objeto. For examples of how data tables keep track of proposed changes, see DataRowState, HasChanges, and GetChanges.
Salvando dados em objetos de volta ao banco de dados
Você salva dados de volta para o banco de dados passando os valores de seu objeto para os métodos DBDirect do TableAdapter.
O Visual Studio cria métodos DBDirect que podem ser executados diretamente no banco de dados. Esses métodos não requerem objetos DataSet ou DataTable.
Método DBDirect do TableAdapter |
Descrição |
---|---|
TableAdapter.Insert |
Adiciona novos registros a um banco de dados, permitindo que você passe valores individuais de coluna como parâmetros do método. |
TableAdapter.Update |
Atualizações de registros existentes em um banco de dados. O método Update aceita valores originais e a novos valores de coluna como parâmetros do método. Os valores originais são usados para localizar o registro original, e os novos valores são usados para atualizar esse registro. The TableAdapter.Update method is also used to reconcile changes in a dataset back to the database by taking a DataSet, DataTable, DataRow, or array of DataRows as method parameters. |
TableAdapter.Delete |
Exclui registros existentes do banco de dados com base nos valores originais da coluna que foram passados como parâmetros do método. |
Para salvar dados de uma coleção de objetos, percorra a coleção de objetos (por exemplo, usando um loop for-next) e envie os valores de cada objeto para o banco de dados usando métodos DBDirect do TableAdapter.
The following example shows how to use the TableAdapter.Insert DBDirect method to add a new customer directly into the database:
Private Sub AddNewCustomer(ByVal currentCustomer As Customer)
CustomersTableAdapter.Insert(
currentCustomer.CustomerID,
currentCustomer.CompanyName,
currentCustomer.ContactName,
currentCustomer.ContactTitle,
currentCustomer.Address,
currentCustomer.City,
currentCustomer.Region,
currentCustomer.PostalCode,
currentCustomer.Country,
currentCustomer.Phone,
currentCustomer.Fax)
End Sub
private void AddNewCustomers(Customer currentCustomer)
{
customersTableAdapter.Insert(
currentCustomer.CustomerID,
currentCustomer.CompanyName,
currentCustomer.ContactName,
currentCustomer.ContactTitle,
currentCustomer.Address,
currentCustomer.City,
currentCustomer.Region,
currentCustomer.PostalCode,
currentCustomer.Country,
currentCustomer.Phone,
currentCustomer.Fax);
}
Consulte também
Tarefas
Como: Conectar-se a dados em objetos
Demonstra Passo a passo: Conectando a dados em objetos (Windows Forms)
Como: Salvar dados de um objeto para um banco de dados.
Como: Acessar diretamente o banco de dados com um TableAdapter
Demonstra Passo a passo: Salvando dados com os métodos DBDirect do TableAdapter
Conceitos
Controles de vinculação de dados de Visual Studio