Partilhar 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 estão desconectados do banco de dados. As tecnologias são especialmente úteis para aplicativos que permitem aos usuários modificar dados e manter as alterações de volta ao 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 vinculado a dados, você pode especificar quais campos são editáveis pelo usuário.

Nesses casos, a infraestrutura de vinculação de dados lida com 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 façam o controle de alterações.

Além de alterar os dados reais, você também pode consultar um DataTable para retornar linhas específicas de dados. 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, em seguida, 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ê pode 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 ligados 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 à DataRow coleção (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 eliminar um DataRow chamando o método Remove do DataRowCollection, ou chamando o método Delete do objeto DataRow.

O Remove método remove a linha da coleção. Se seu 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 Delete método não remove o DataRow, mas 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 reter as informações de que o conjunto de dados precisa para enviar atualizações para a fonte de dados, use o Delete método para remover o DataRow da tabela de dados. Se a sua aplicação usa um TableAdapter ou DataAdapter, o método Update apaga 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 obtiveres a propriedade count de um DataRowCollection, a contagem resultante incluirá registos 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. Os registos que foram marcados para eliminação têm um RowState de Deleted. Como alternativa, pode criar uma vista de dados de um conjunto de dados que filtra com base no estado da linha e obter a propriedade de contagem a partir dela.

Verificar se há linhas alteradas

Quando você faz alterações em 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 quando chama o método AcceptChanges de um conjunto de dados ou de uma tabela de dados, ou quando chama o método Update de um TableAdapter ou de um adaptador de dados.

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

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

  • Cada linha de dados alterada contém várias versões. O DataRowVersion inclui 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 RowChanging evento, 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 retorna true se foram feitas alterações no conjunto de dados. Depois de determinar que existem alterações, você pode chamar o GetChanges método de um DataSet ou DataTable para retornar um conjunto de linhas alteradas.

O exemplo a seguir mostra como verificar o HasChanges valor de retorno do método para detetar se há alguma linha alterada no 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 que 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 com erros

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

Se a HasErrors propriedade 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.
                    }
                }
            }
        }
    }
}