Compartilhar via


Interfaces relacionadas à vinculação de dados

Com ADO.NET, você pode criar muitas estruturas de dados diferentes para atender às necessidades de associação do aplicativo e aos dados com os quais você está trabalhando. Talvez você queira criar suas próprias classes que fornecem ou consomem dados no Windows Forms. Esses objetos podem oferecer diferentes níveis de funcionalidade e complexidade, desde a associação básica de dados até o fornecimento de suporte em tempo de design, verificação de erros, notificação de alteração ou até mesmo suporte para uma reversão estruturada das alterações feitas nos próprios dados.

Consumidores de interfaces de Data-Binding

As seções a seguir descrevem dois grupos de objetos de interface. O primeiro grupo lista interfaces que são implementadas em fontes de dados por autores da fonte de dados. Essas interfaces são projetadas para serem consumidas por consumidores de fonte de dados, que na maioria dos casos são componentes ou controles do Windows Forms. O segundo grupo lista interfaces projetadas para uso por autores de componentes. Os autores de componentes usam essas interfaces ao criar um componente que dá suporte à associação de dados a ser consumida pelo mecanismo de associação de dados do Windows Forms. Você pode implementar essas interfaces em classes associadas ao formulário para habilitar a associação de dados; cada caso apresenta uma classe que implementa uma interface que permite a interação com os dados. As ferramentas de experiência de design de dados RAD (desenvolvimento rápido de aplicativos) do Visual Studio já aproveitam essa funcionalidade.

Interfaces para implementação por autores da fonte de dados

As interfaces a seguir foram projetadas para serem consumidas pelos controles do Windows Forms:

  • interface IList

    Uma classe que implementa a interface IList pode ser um Array, ArrayListou CollectionBase. Estas são listas indexadas de itens do tipo Object. Essas listas devem conter tipos homogêneos, pois o primeiro item do índice determina o tipo. IList estaria disponível para vinculação somente em tempo de execução.

    Nota

    Se você quiser criar uma lista de objetos de negócios para associação com o Windows Forms, considere usar o BindingList<T>. O BindingList<T> é uma classe extensível que implementa as interfaces primárias necessárias para associação de dados bidirecionais do Windows Forms.

  • interface IBindingList

    Uma classe que implementa a interface IBindingList fornece um nível muito maior de funcionalidade de associação de dados. Essa implementação oferece recursos básicos de classificação e notificação de alteração, tanto para quando os itens de lista são alterados (por exemplo, o terceiro item em uma lista de clientes tem uma alteração no campo Endereço), bem como quando a própria lista é alterada (por exemplo, o número de itens na lista aumenta ou diminui). A notificação de alteração é importante se você planeja ter vários controles associados aos mesmos dados e deseja que alterações de dados feitas em um dos controles se propaguem para os outros controles associados.

    Nota

    A notificação de alteração está habilitada para a interface IBindingList por meio da propriedade SupportsChangeNotification que, quando true, gera um evento ListChanged, indicando que a lista foi alterada ou um item na lista foi alterado.

    O tipo de alteração é descrito pela propriedade ListChangedType do parâmetro ListChangedEventArgs. Portanto, sempre que o modelo de dados for atualizado, quaisquer exibições dependentes, como outros controles associados à mesma fonte de dados, também serão atualizadas. No entanto, os objetos contidos na lista terão que notificar a lista quando forem alterados para que a lista possa gerar o evento ListChanged.

    Nota

    O BindingList<T> fornece uma implementação genérica da interface IBindingList.

  • interface IBindingListView

    Uma classe que implementa a interface IBindingListView fornece toda a funcionalidade de uma implementação de IBindingList, bem como filtragem e funcionalidade de classificação avançada. Essa implementação oferece filtragem baseada em strings e classificação de várias colunas com pares de direção de descritor de propriedade.

  • interface IEditableObject

    Uma classe que implementa a interface IEditableObject permite que um objeto controle quando as alterações nesse objeto são permanentes. Essa implementação oferece os métodos BeginEdit, EndEdite CancelEdit, que permitem reverter as alterações feitas no objeto. Veja a seguir uma breve explicação do funcionamento dos métodos BeginEdit, EndEdite CancelEdit e como eles funcionam em conjunto uns com os outros para habilitar uma possível reversão de alterações feitas nos dados:

    • O método BeginEdit sinaliza o início de uma edição em um objeto. Um objeto que implementa essa interface precisará armazenar as atualizações após a chamada do método BeginEdit de modo que as atualizações possam ser descartadas se o método CancelEdit for chamado. Nos Windows Forms de associação a dados, você pode chamar BeginEdit várias vezes dentro do escopo de uma única transação de edição (por exemplo, BeginEdit, BeginEdit, EndEdit). As implementações de IEditableObject devem acompanhar se BeginEdit já foi chamado e ignorar chamadas subsequentes para BeginEdit. Como esse método pode ser chamado várias vezes, é importante que as chamadas subsequentes a ele não sejam indestrutivas; ou seja, chamadas BeginEdit subsequentes não podem destruir as atualizações que foram feitas ou alterar os dados que foram salvos na primeira chamada BeginEdit.

    • O método EndEdit aplica as alterações realizadas desde que BeginEdit foi chamado ao objeto subjacente, caso o objeto esteja no modo de edição.

    • O método CancelEdit descarta as alterações feitas no objeto.

    Para obter mais informações sobre como funcionam os métodos BeginEdit, EndEdite CancelEdit, consulte Salvar dados de volta para o banco de dados.

    Essa noção transacional de funcionalidade de dados é usada pelo controle DataGridView.

  • ICancelAddNew interface

    Uma classe que implementa a interface ICancelAddNew geralmente implementa a interface IBindingList e permite reverter uma adição feita à fonte de dados com o método AddNew. Se a sua fonte de dados implementar a interface IBindingList, você também deverá implementar a interface ICancelAddNew.

  • interface IDataErrorInfo

    Uma classe que implementa a interface IDataErrorInfo permite que os objetos ofereçam informações de erro personalizadas aos controles associados:

    • A propriedade Error retorna texto de mensagem de erro geral (por exemplo, "Ocorreu um erro").

    • A propriedade Item[] retorna uma cadeia de caracteres com a mensagem de erro específica da coluna (por exemplo, "O valor na coluna State é inválido").

  • interface IEnumerable

    Uma classe que implementa a interface IEnumerable normalmente é consumida por ASP.NET. O suporte do Windows Forms para essa interface só está disponível por meio do componente BindingSource.

    Nota

    O componente BindingSource copia todos os itens IEnumerable em uma lista separada para fins de associação.

  • interface ITypedList

    Uma classe de coleções que implementa a interface ITypedList fornece a capacidade de controlar a ordem e o conjunto de propriedades expostas ao controle vinculado.

    Nota

    Quando você implementa o método GetItemProperties e a matriz PropertyDescriptor não é nula, a última entrada na matriz será o descritor de propriedade que descreve a propriedade de lista que é outra lista de itens.

  • interface ICustomTypeDescriptor

    Uma classe que implementa a interface ICustomTypeDescriptor fornece informações dinâmicas sobre si mesma. Essa interface é semelhante a ITypedList mas é usada para objetos em vez de listas. Essa interface é usada por DataRowView para projetar o esquema das linhas subjacentes. Uma implementação simples de ICustomTypeDescriptor é fornecida pela classe CustomTypeDescriptor.

    Nota

    Para dar suporte à associação de tempo de design a tipos que implementam ICustomTypeDescriptor, o tipo também deve implementar IComponent e existir como uma instância no Formulário.

  • interface IListSource

    Uma classe que implementa a interface IListSource habilita a associação baseada em lista em objetos não listados. O método GetList de IListSource é usado para retornar uma lista associável de um objeto que não herda de IList. IListSource é usado pela classe DataSet.

  • interface IRaiseItemChangedEvents

    Uma classe que implementa a interface IRaiseItemChangedEvents é uma lista associável que também implementa a interface IBindingList. Essa interface é usada para indicar se o tipo gera ListChanged eventos do tipo ItemChanged por meio de sua propriedade RaisesItemChangedEvents.

    Nota

    Você deve implementar o IRaiseItemChangedEvents se a fonte de dados fornecer a propriedade para listar a conversão de eventos, conforme descrito anteriormente, e se estiver interagindo com o componente BindingSource. Caso contrário, o BindingSource também executará a propriedade para listar a conversão de eventos, resultando em um desempenho mais lento.

  • ISupportInitialize interface

    Um componente que implementa a interface ISupportInitialize aproveita as otimizações em lotes para definir propriedades e inicializar propriedades co dependentes. O ISupportInitialize contém dois métodos:

    • BeginInit sinaliza que a inicialização do objeto está começando.

    • EndInit sinaliza que a inicialização do objeto está sendo concluída.

  • ISupportInitializeNotification interface

    Um componente que implementa a interface ISupportInitializeNotification também implementa a interface ISupportInitialize. Essa interface permite que você notifique outros componentes ISupportInitialize que a inicialização está concluída. A interface ISupportInitializeNotification contém dois membros:

  • interface INotifyPropertyChanged

    Uma classe que implementa essa interface é um tipo que gera um evento quando qualquer um de seus valores de propriedade é alterado. Essa interface foi projetada para substituir o padrão de ter um evento de alteração para cada propriedade de um controle. Quando usado em um BindingList<T>, um objeto de negócios deve implementar a interface INotifyPropertyChanged e o BindingList'1 converterá eventos de PropertyChanged para eventos de ListChanged do tipo ItemChanged.

    Nota

    Para que a notificação de alteração ocorra em uma associação entre um cliente associado e uma fonte de dados, seu tipo de fonte de dados associada deve implementar a interface de INotifyPropertyChanged (preferencial) ou você pode fornecer propertyNameChanged eventos para o tipo associado, mas você não deve fazer as duas coisas.

Interfaces para implementação por autores de componentes

As interfaces a seguir são projetadas para consumo pelo mecanismo de associação de dados do Windows Forms:

Consulte também