Compartilhar via


Editar dados em conjuntos de dados

 

Publicado: abril de 2016

Editar os dados em tabelas de dados tanto quanto você edita os dados em uma tabela em qualquer banco de dados — o processo pode incluir inserir, atualizar e excluir registros na tabela. Em um formulário de associação de dados, você pode especificar quais campos são editáveis pelo usuário. Nesses casos, a infra-estrutura de ligação de dados lida com todo o controle de alterações para que as alterações podem ser enviadas no banco de dados posteriormente. Se você programaticamente fazer edições em dados e quiser enviar essas alterações no banco de dados, você deve usar os objetos e métodos que o controle de alterações para você.

Além de alterar os dados reais, você também pode consultar um DataTable para retornar linhas específicas dos dados, por exemplo, linhas individuais, versões específicas de linhas (original e proposta), somente linhas que foram alteradas e linhas que possuem erros.

Editar linhas em um conjunto de dados

Para editar uma linha existente em um DataTable, você precisa localizar o DataRow você deseja editar e, em seguida, atribuir os valores atualizados para as colunas desejadas.

Se você não souber o índice da linha você deseja editar, use o FindBy método para pesquisar a chave primária.

            NorthwindDataSet.CustomersRow customersRow = 
                northwindDataSet1.Customers.FindByCustomerID("ALFKI");

            customersRow.CompanyName = "Updated Company Name";
            customersRow.City = "Seattle";;
        Dim customersRow As NorthwindDataSet.CustomersRow
        customersRow = NorthwindDataSet1.Customers.FindByCustomerID("ALFKI")

        customersRow.CompanyName = "Updated Company Name"
        customersRow.City = "Seattle"

Se você souber o índice da linha, você pode acessar e edita linhas como esta:

            northwindDataSet1.Customers[4].CompanyName = "Updated Company Name";
            northwindDataSet1.Customers[4].City = "Seattle";
        NorthwindDataSet1.Customers(4).CompanyName = "Updated Company Name"
        NorthwindDataSet1.Customers(4).City = "Seattle"

Inserir uma nova linha em um dataset

Aplicativos que usam controles vinculados a dados normalmente adicionam novos registros através do botão "Adicionar novo" em um controle BindingNavigator.

Para adicionar manualmente novos registros em um conjunto de dados, crie uma nova linha de dados chamando o método na DataTable. Em seguida, adicione a linha a DataRow coleção (Rows) da DataTable

            NorthwindDataSet.CustomersRow newCustomersRow = 
                northwindDataSet1.Customers.NewCustomersRow();

            newCustomersRow.CustomerID = "ALFKI";
            newCustomersRow.CompanyName = "Alfreds Futterkiste";

            northwindDataSet1.Customers.Rows.Add(newCustomersRow);
        Dim newCustomersRow As NorthwindDataSet.CustomersRow
        newCustomersRow = NorthwindDataSet1.Customers.NewCustomersRow()

        newCustomersRow.CustomerID = "ALFKI"
        newCustomersRow.CompanyName = "Alfreds Futterkiste"

        NorthwindDataSet1.Customers.Rows.Add(newCustomersRow)

Para manter as informações que o dataset precisa para enviar atualizações para a fonte de dados, use o Delete método para remover linhas em uma tabela de dados. Por exemplo, se seu aplicativo usa um TableAdapter (ou DataAdapter), o adaptador Update método excluirá as linhas no banco de dados que têm um RowState de Deleted.

Se seu aplicativo não precisa enviar atualizações de volta para uma fonte de dados, é possível remover registros acessando a coleção da linha de dados diretamente (Remove).

Para excluir registros de uma tabela de dados

  • Chamar o Delete método de um DataRow.

    Esse método não remove fisicamente o registro. em vez disso, ele marca o registro para exclusão.

    Dica

    Se você receber a propriedade count de um DataRowCollection, a contagem resultante inclui registros que foram marcados para exclusão. Para obter uma contagem precisa apenas de registros que não são marcados para exclusão, você pode fazer um loop através da coleção examinando o RowState propriedade de cada registro (registros marcados para exclusão têm um RowState de Deleted). Como alternativa, você pode criar uma exibição de dados de um dataset que filtra com base no estado de linha e obter a propriedade count de lá.

    O exemplo a seguir mostra como chamar o Delete método para marcar a primeira linha de Customers como excluída da tabela:

                northwindDataSet1.Customers.Rows[0].Delete();
    
            NorthwindDataSet1.Customers.Rows(0).Delete()
    

Determinar se há linhas alteradas

Quando forem feitas alterações a registros em um conjunto de dados, informações sobre essas alterações são armazenadas até confirmá-las. As alterações são confirmadas ao chamar o AcceptChanges método de um conjunto de dados, tabela de dados ou chamar o Update método de um TableAdapter ou adaptador de dados.

As alterações são controladas em cada linha de dados de duas maneiras:

  • Cada linha de dados contém informações sobre seu RowState (por exemplo, Added, Modified, Deleted, Unchanged).

  • Cada linha de dados alterada contém várias versões dessa linha (DataRowVersion); o original (antes de alterações) e versões atuais (após alterações) — que você pode acessar. Durante o período quando uma alteração é pendente (o tempo que você pode responder a RowChanging evento), uma terceira versão — a versão proposta — também está disponível. Para obter mais informações, consulte Como obter versões específicas de um DataRow.

O HasChanges método de um dataset retorna true se alterações tiverem sido feitas no conjunto de dados. Após determinar que linhas alteradas existem, você pode chamar o GetChanges método de um DataSet ou DataTable para retornar um conjunto de linhas alteradas. Para obter mais informações, consulte Como recuperar linhas alteradas.

Para determinar se as alterações foram feitas para quaisquer linhas

  • Chamar o HasChanges método de um conjunto de dados para verificar linhas alteradas.

    O exemplo a seguir mostra como verificar o valor de retorno de HasChanges método para detectar se há quaisquer linhas alteradas em um dataset chamado NorthwindDataset1.

                if (northwindDataSet1.HasChanges()) 
                {
                    // Changed rows were detected, add appropriate code.
                }
                else
                {
                    // No changed rows were detected, add appropriate code.
                }
    
            If NorthwindDataSet1.HasChanges() Then
    
                ' Changed rows were detected, add appropriate code.
            Else
                ' No changed rows were detected, add appropriate code. 
            End If
    

Determinando o tipo de alterações

Você também pode verificar para ver quais tipos de alterações foram feitas em um dataset, passando um valor da DataRowState enumeração para o HasChanges método.

Para determinar que tipo de alterações foram feitas em uma linha

  • Passar um DataRowState de valor para o HasChanges método.

    O exemplo a seguir mostra como verificar um dataset chamado NorthwindDataset1 para determinar se tem havido quaisquer novas linhas adicionadas a ele:

                if (northwindDataSet1.HasChanges(DataRowState.Added)) 
                {
                    // New rows have been added to the dataset, add appropriate code.
                }
                else
                {
                    // No new rows have been added to the dataset, add appropriate code.
                }
    
            If NorthwindDataSet1.HasChanges(DataRowState.Added) Then
    
                ' New rows have been added to the dataset, add appropriate code.
            Else
                ' No new rows have been added to the dataset, add appropriate code.
            End If
    

Para localizar linhas com erros

Ao trabalhar com colunas individuais e linhas de dados, pode haver vezes que um registro contenha um erro. Você pode verificar o HasErrors para determinar se existem erros em um DataSet, DataTable, ou DataRow.

  1. Verifique o HasErrors propriedade para ver se há erros no dataset.

  2. Se o HasErrors é de propriedade true, interaja nas coleções de tabelas e, em seguida, as linhas para encontrar a linha com o erro.

            private void FindErrors() 
            {
                if (dataSet1.HasErrors)
                {
                    foreach (DataTable table in dataSet1.Tables)
                    {
                        if (table.HasErrors)
                        {
                            foreach (DataRow row in table.Rows)
                            {
                                if (row.HasErrors)
                                {
                                    // Process error here.
                                }
                            }
                        }
                    }
                }
            }
    
        Private Sub FindErrors()
            Dim table As Data.DataTable
            Dim row As Data.DataRow
    
            If DataSet1.HasErrors Then
    
                For Each table In DataSet1.Tables
                    If table.HasErrors Then
    
                        For Each row In table.Rows
                            If row.HasErrors Then
    
                                ' Process error here.
                            End If
                        Next
                    End If
                Next
            End If
        End Sub