Vinculação de objeto no Visual Studio

O Visual Studio fornece ferramentas em tempo de design para trabalharem com objetos personalizados (em oposição a Datasets e serviços da Web) como a fonte de dados em seu aplicativo.

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.Nenhum construtor específico ou atributos são necessários a objetos personalizados para trabalharem com ferramentas tais como a janela Data Sources.

Enquanto houver incontáveis maneiras de implementar a lógica do aplicativo ao trabalhar com objetos como uma fonte de dados, existirão algumas poucas operações padrões que podem ser simplificadas usando os novos objetos TableAdapter gerados do Visual Studio.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 de um banco de dados)

  • Criar uma coleção tipada de objetos

  • Adição de objetos para uma coleção e remoção de objetos de uma coleção

  • Exibir os dados de objeto aos usuários em um formulário

  • Alteração/edição de dados em um objeto

  • Salvar dados a partir objetos de volta ao banco de dados

Observação:

Para entender melhor e fornecer contexto para os exemplos nesta página, é recomendável que você conclua o seguinte: Demonstra Passo a passo: Conectando-se a dados in Objects.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:

O Visual Studio nomeia as consultas do TableAdapter Fill e GetData Por padrão, mas esses nomes podem ser alterados para qualquer nome de método válido.

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-se a dados in Objects.

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:

Se sua coleção exigir funcionalidade não fornecida pela implementação base das BindingList<T>, em seguida, você deve criar uma coleção personalizada para que você possa adicionar à classe, conforme necessário.

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-se a dados in Objects.

For an example of adding objects to a custom collection, see the LoadOrders method in Demonstra Passo a passo: Conectando-se a dados in Objects.

Observação:

O Add método é fornecido automaticamente para sua coleção personalizada quando você herda do 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:

Neste exemplo o Orders coleção é uma propriedade das Customer objeto.

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:

O Remove e RemoveAt métodos são fornecidos automaticamente para sua coleção personalizada quando você herda do 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 in an objeto.

For more information on displaying data from objects on Windows Forms, see Exibindo dados em formulários em aplicativos do Windows.

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 in an objeto

Demonstra Passo a passo: Conectando-se a dados in Objects

Como: Salvar dados de um objeto a 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

Outros recursos

Exibindo dados em formulários em aplicativos do Windows

TableAdapters

Salvando dados