Compartilhar via


Editar dados em conjuntos de dados usando o .NET Framework

Observação

Os conjuntos de dados 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 bastante úteis em aplicativos que permitem que os usuários modifiquem dados e persistam as alterações no banco de dados. Embora os conjuntos de dados tenham se mostrado uma tecnologia muito bem-sucedida, é recomendado que os novos aplicativos .NET usem o Entity Framework Core. O Entity Framework proporciona uma forma mais natural de trabalhar com dados tabulares como modelos de objeto e conta com uma interface de programação mais simples.

Você edita dados em tabelas de dados da mesma maneira que edita dados em uma tabela em qualquer banco de dados. O processo pode incluir a inserção, a atualização e a exclusão de registros na tabela. Em um formulário associado a dados, você pode especificar quais campos podem ser editados pelo usuário. Nesses casos, a infraestrutura de associação de dados cuida de todo o controle de alterações para que as alterações possam ser enviadas de volta para o banco de dados posteriormente. Se você faz edições nos dados programaticamente e pretende enviar essas alterações de volta para o banco de dados, use os objetos e métodos que fazem o controle de alterações para você.

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

Para 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 método FindBy para pesquisar pela chave primária:

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

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

Se você souber o índice de linha, poderá acessar e editar linhas da seguinte maneira:

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

Para inserir novas linhas em um conjunto de dados

Aplicativos que usam controles associados a dados normalmente adicionam novos registros por meio do botão Adicionar Novo em um controle BindingNavigator.

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

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

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

northwindDataSet1.Customers.Rows.Add(newCustomersRow);

Para manter as informações necessárias para que o conjunto de dados envie atualizações para a fonte de dados, use o método Delete para remover linhas em uma tabela de dados. Por exemplo, se o aplicativo usa um TableAdapter (ou DataAdapter), o método Update do TableAdapter exclui linhas no banco de dados que têm um RowState de Deleted.

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

Para excluir registros de uma tabela de dados

  • Chame o método Delete de um DataRow.

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

    Observação

    Se você receber a propriedade de contagem de um DataRowCollection, a contagem resultante incluirá registros que foram marcados para exclusão. Para obter uma contagem precisa de registros que não estão marcados para exclusão, você pode executar um loop na coleção examinando a propriedade RowState 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 conjunto de dados que é filtrado com base no estado da linha e obter a propriedade de contagem dessa forma.

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

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

Determinar se há linhas alteradas

Quando são feitas 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 chamando o método AcceptChanges de um conjunto de dados ou tabela de dados chamando o método Update de um TableAdapter ou 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 RowState (por exemplo, Added, Modified, Deleted ou Unchanged).

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

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

Para determinar se foram feitas alterações em qualquer linha

  • Chame o método HasChanges de um conjunto de dados para verificar se há linhas alteradas.

O exemplo a seguir mostra como verificar o valor retornado do método HasChanges para detectar se há linhas alteradas em um conjunto de dados chamado 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ê também pode verificar quais tipo de alterações foram feitas em um conjunto de dados passando um valor da enumeração DataRowState para o método HasChanges.

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

O exemplo a seguir mostra como verificar um conjunto de dados chamado NorthwindDataset1 para determinar se novas linhas foram 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.
}

Para localizar linhas com erros

Ao trabalhar com colunas e linhas de dados individuais, você pode encontrar erros. Você pode verificar a propriedade HasErrors para determinar se há erros em um DataSet, DataTable ou DataRow.

  1. Verifique a propriedade HasErrors para ver se há erros no conjunto de dados.

  2. Se a propriedade HasErrors for true, itere pelas coleções de tabelas e, em seguida, pelas linhas para localizar 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.
                    }
                }
            }
        }
    }
}