Compartilhar via


Criando um objeto de origem de controle ObjectDataSource

The source object for an ObjectDataSource control retrieves data and performs updates in the underlying data source as requested by the ObjectDataSource control.O objeto de origem para um controle ObjectDataSource pode ser qualquer classe que o controle ObjectDataSource pode criar uma instância de ou que expõe métodos públicos static (Shared no Microsoft Visual Basic) que o controle ObjectDataSource pode chamar.

Para obter um exemplo de um objeto de origem e da página ASP.NET que inclui um controle ObjectDataSource que usa o objeto de origem, consulte Exemplo do Objeto de Origem ObjectDataSource ou Exemplo do objeto fonte fortemente tipado ObjectDataSource.

Criação do Objeto

O controle ObjectDataSource será criar uma instância do objeto de origem, o método especificado, chamada e descarte-o da instância de objeto todos dentro do escopo de uma única solicitação, se o objeto tiver métodos da instância em vez de static métodos (Shared no Visual Basic).Desse modo, seu objeto deve estar sem-estado.Isto é, o objeto deve adquirir e liberar todos os recursos necessários dentro do intervalo de uma solicitação única.

Você pode controlar como o objeto de origem é criado ao manipular o evento ObjectCreating do controle ObjectDataSource.Você pode criar uma instância do objeto de origem e, em seguida, definir a propriedade ObjectInstance da classe ObjectDataSourceEventArgs para essa instância.O controle ObjectDataSource usará a instância criada no evento ObjectCreating em vez de criar uma instância por conta própria.

Especificando um Construtor de Classe

Se o objeto de origem para um controle ObjectDataSource expõe métodos públicos static (Shared no Visual Basic) que podem ser chamados para recuperar e modificar dados, um controle ObjectDataSource chamará esses métodos diretamente.Se um controle ObjectDataSource deve criar uma instância do objeto de origem para fazer chamadas de método, o objeto deverá incluir um construtor público que não leva parâmetros.O controle ObjectDataSource chamará este construtor quando ele cria uma nova instância do objeto de origem.

Se o objeto de origem não contiver um construtor público sem parâmetros, você pode criar uma instância do objeto de origem que será usada pelo controle ObjectDataSource no evento ObjectCreating, conforme discutido em "Criação do Objeto ", anteriormente neste tópico.

Especificando Métodos de Objeto

O objeto para um ObjectDataSource controle de origem pode conter qualquer número de métodos que são usados para selecionar, inserir, atualizar, ou excluir dados.Esses métodos são chamados pelo controle ObjectDataSource com base no nome do método, conforme identificado usando a propriedade SelectMethod, InsertMethod, UpdateMethod ou DeleteMethod do controle ObjectDataSource e os nomes dos parâmetros que estão no conjunto de parâmetros relacionados à ação selecionada.Para informações detalhadas, consulte Usando Parâmetros com o Controle ObjectDataSource.

O objeto de origem também pode incluir um método SelectCount opcional, que é identificado pelo controle ObjectDataSource usando a propriedade SelectCountMethod, que retorna a contagem do número total de objetos na fonte de dados.O controle ObjectDataSource chamará o método SelectCount após um método Select ser chamado para recuperar o número total de registros na fonte de dados para uso quando houver paginação.

Observação:

É altamente recomendável que você implemente um método SelectCount se seu objeto oferecer suporte para paginação.Isso irá minimizar o número de registros que um controle associado a dados, tal como o controle GridView, deve solicitar para recuperar uma página de dados.Se a contagem total de linhas é fornecida pelo objeto de dados de origem, um controle associado a dados irá solicitar uma única página de linhas de uma vez paracada página.Se a contagem total de linhas não for fornecida, o controle associado a dados deve solicitar todas as linhas a partir da fonte de dados (começando com a primeira linha da página solicitada de dados) e descartar quaisquer linhas que não estão na página atual.

Trabalhando com Objetos Fortemente Tipados

O objeto de origem poderá retornar e receber objetos fortemente tipados com base nos dados da sua fonte de dados.O controle ObjectDataSource identifica o tipo desses objetos usando a propriedade DataObjectTypeName.Nesse cenário, em vez de passar um ou mais parâmetros para um método, é passado um objeto que agrega todos os valores de parâmetro.Para obter mais informações sobre como passar um tipo de objeto específico como um parâmetro para um método de objeto de origem, consulte Usando Parâmetros com o Controle ObjectDataSource.

Quando a propriedade ConflictDetection de um controle ObjectDataSource é definida como o valor CompareAllValues e a propriedade OldValuesParameterFormatString é definida como um valor que distingue parâmetros para os valores originais de parâmetros para os valores atuais, o ObjectDataSource fará o seguinte:

  • Chame o método Update do objeto de origem que leva os parâmetros para os valores atuais e originais.

  • Chame o método Delete do objeto de origem que aceita parâmetros para os valores originais.

Quando ele usa um objeto de tipo forte, o controle ObjectDataSource irá chamar o método Update do objeto de origem que leva tanto um objeto rigidamente tipado que é preenchido com valores atuais quanto um objeto rigidamente tipado que é preenchido com valores originais.No entanto, quando o controle ObjectDataSource chama o método Delete e passa um objeto do tipo rígido, ele chama o método que utiliza um único objeto do tipo rígido como um parâmetro, independentemente da configuração ConflictDetection ou OldValuesParameterFormatString.Se a propriedade ConflictDetection é definida para o valor OverwriteChanges, o objeto passado para o método Delete é preenchido com valores de chave primária atual apenas (as outras propriedades do objeto são null).Se a propriedade ConflictDetection é definida para o valor CompareAllValues,o objeto passado para o método Delete é preenchido com valores de chave primária originais e valores originais para o resto das propriedades do objeto.

Trabalhando com Designers

Opcionalmente, você pode aplicar atributos para seu objeto de origem que o descreve a um designer, tal como a ferramenta de desenvolvimento Microsoft Visual Web, como um objeto de dados.Isso pode melhorar a experiência do desenvolvedor que está usando o designer pela especificação de quais métodos do seu objeto são usados para selecionar, inserir, atualizar, e excluir operações.

Para identificar seu objeto como um objeto de origem para um controle ObjectDataSource, use o atributo DataObjectAttribute, conforme mostrado no exemplo o seguir.

<DataObject(True)> _
Public Class NorthwindEmployee 
[DataObject(true)]
public class NorthwindEmployee

Para identificar um método como um método de objeto de dados, use o atributo DataObjectMethodAttribute.Quando você aplicar o atributo DataObjectMethodAttribute, inclua um dos valores de enumeração DataObjectMethodType para identificar o tipo de método (em seleção, inserção, atualização ou exclução).O exemplo de código a seguir usa o atributo DataObjectMethodAttribute para identificar um método como um método Delete.

<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Shared Function DeleteEmployee(EmployeeID As Integer) As Boolean

  If Not _initialized Then Initialize()

  Dim conn As SqlConnection  = New SqlConnection(_connectionString)
  Dim cmd  As SqlCommand     = New SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn)  
  cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID

  Try
    conn.Open()

    If cmd.ExecuteNonQuery() <> 0 Then _
      Return False
  Catch e As SqlException
    ' Handle exception.
  Finally
    conn.Close()
  End Try

  Return True
End Function
[DataObjectMethod(DataObjectMethodType.Delete)]
public static bool DeleteEmployee(int EmployeeID)
{
  if (!_initialized) { Initialize(); }

  SqlConnection conn = new SqlConnection(_connectionString);
  SqlCommand    cmd  = new SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn);  
  cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID;

  try
  {
    conn.Open();

    if (cmd.ExecuteNonQuery() == 0)
      return false;
  }
  catch (SqlException e)
  {
    // Handle exception.
  }
  finally
  {
    conn.Close();
  }

  return true;
}

Consulte também

Conceitos

Exemplo do Objeto de Origem ObjectDataSource

Usando Parâmetros com o Controle ObjectDataSource

Referência

Visão geral sobre o controle de servidor Web ObjectDataSource