Compartilhar via


Editar dados em conjuntos de dados usando o .NET Framework

Observação

A DataSet classe e as classes relacionadas são tecnologias herdadas do .NET Framework do início dos anos 2000 que permitem que os aplicativos trabalhem com dados na memória enquanto os aplicativos são desconectados do banco de dados. As tecnologias são especialmente úteis para aplicativos que permitem que os usuários modifiquem dados e persistam as alterações no banco de dados. Embora os conjuntos de dados sejam uma tecnologia comprovadamente bem-sucedida, a abordagem recomendada para novos aplicativos .NET é usar o Entity Framework Core. O Entity Framework fornece uma maneira mais natural de trabalhar com dados tabulares como modelos de objeto e tem uma interface de programação mais simples.

Este artigo descreve como consultar e editar dados em tabelas em conjuntos de dados do .NET Framework. Você pode editar dados em tabelas de dados da mesma forma que edita as tabelas em qualquer banco de dados. Você pode inserir, atualizar e excluir registros na tabela. Em um formulário associado a dados, você pode especificar quais campos são editáveis pelo usuário.

Nesses casos, a infraestrutura de associação de dados manipula todo o controle de alterações para que as alterações possam ser enviadas de volta ao banco de dados. Se você editar dados programaticamente e quiser enviar as alterações de volta para o banco de dados, deverá usar objetos e métodos que fazem o controle de alterações.

Além de alterar os dados reais, você também pode consultar uma DataTable para retornar linhas de dados específicas. Por exemplo, você pode consultar linhas individuais, versões originais ou propostas de linhas, linhas que foram alteradas ou linhas que contêm erros.

Pré-requisitos

Para usar o Visual Studio para consultar e editar dados em conjuntos de dados do .NET Framework, você precisa:

Editar linhas em um conjunto de dados

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

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

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

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

Depois de conhecer o índice de linha, você poderá usá-lo para acessar e editar a linha.

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

Inserir novas linhas em um conjunto de dados

Os aplicativos que usam controles associados a dados normalmente adicionam novos registros usando o botão Adicionar Novo em um controle BindingNavigator.

Você também pode adicionar um novo registro a um conjunto de dados chamando o NewRow método no DataTable. Em seguida, adicione a linha à coleção DataRow (Rows).

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

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

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Excluir registros de uma tabela de dados

Você pode excluir um DataRow chamando o Remove método do DataRowCollection, ou chamando o Delete método do DataRow objeto.

O método Remove remove a linha da coleção. Se o aplicativo não precisar enviar atualizações de volta para uma fonte de dados, você poderá remover registros acessando diretamente a coleção de linhas de dados com Remove.

Por outro lado, o método Delete não remove de fato o DataRow, mas apenas o marca para exclusão. A remoção real ocorre quando você chama AcceptChanges o método. Você pode verificar programaticamente quais linhas estão marcadas para remoção antes de realmente excluí-las.

Para manter as informações de que o conjunto de dados precisa enviar atualizações para a fonte de dados, use o Delete método para remover o DataRow da tabela de dados. Se o seu aplicativo usa um TableAdapter ou um DataAdapter, o método Update exclui linhas que têm um RowState de Deleted.

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

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

Observação

Se você receber a propriedade de contagem de um DataRowCollection, a contagem resultante inclui registros marcados para exclusão. Para obter uma contagem precisa de registros não marcados para exclusão, você pode percorrer a coleção e examinar a RowState propriedade de cada registro. Registros marcados para exclusão possuem um RowState de Deleted. Como alternativa, você pode criar uma exibição de dados de um conjunto de dados que filtra com base no estado da linha e obter a propriedade de contagem dele.

Determinar se há linhas alteradas

Quando você faz alterações nos registros em um conjunto de dados, as informações sobre essas alterações são armazenadas até que você as confirme. Você confirma as alterações ao chamar o método AcceptChanges de um conjunto de dados ou de uma tabela de dados, ou ao chamar o método Update de um adaptador de dados TableAdapter.

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

  • Cada linha de dados contém informações relacionadas à sua RowState, por exemplo Added, Modified, Deletedou Unchanged.

  • Cada linha de dados alterada contém várias versões. Inclui DataRowVersion a versão original antes das alterações e a versão atual após as alterações. Enquanto uma alteração está pendente e você pode responder ao evento RowChanging, uma terceira versão proposta também está disponível.

Para verificar se há linhas alteradas, chame o HasChanges método de um conjunto de dados. O método retornará true se forem feitas alterações no conjunto de dados. Depois de determinar que as alterações existem, você pode chamar o método GetChanges de um DataSet ou DataTable para retornar um conjunto de linhas alteradas.

O exemplo a seguir mostra como verificar o valor retornado do HasChanges método para detectar se há alguma linha alterada em NorthwindDataset1.

if (northwindDataSet1.HasChanges()) 
{
    // Changed rows were detected, add appropriate code.
}
else
{
    // No changed rows were detected, add appropriate code.
}

Determinar o tipo de alterações

Você pode verificar qual tipo de alterações foram feitas em um conjunto de dados passando um valor da DataRowState enumeração para o HasChanges método.

O exemplo a seguir mostra como verificar o NorthwindDataset1 conjunto de dados para determinar se novas linhas foram adicionadas.

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.
}

Localizar linhas que têm erros

Quando você trabalha com colunas individuais e linhas de dados, você pode encontrar erros. Você pode verificar a HasErrors propriedade para determinar se existem erros em um DataSet, DataTableou DataRow.

Se a propriedade HasErrors do conjunto de dados for true, itere pelas coleções de tabelas e, em seguida, pelas linhas, para localizar as linhas com os erros.

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.
                    }
                }
            }
        }
    }
}