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.
Verifique o
HasErrors
propriedade para ver se há erros no dataset.Se o
HasErrors
é de propriedadetrue
, 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