Compartilhar via


Interfaces relacionadas à vinculação de dados

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

Consumidores de interfaces de associação de dados

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

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

As seguintes interfaces são projetadas para serem consumidas por controles dos Windows Forms:

  • IList interface

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

    Observação

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

  • IBindingList interface

    Uma classe que implementa a IBindingList interface fornece um nível muito mais alto de funcionalidade de vinculação de dados. Essa implementação oferece recursos básicos de classificação e notificação de alteração para quando os itens da lista são alterados (por exemplo, o terceiro item em uma lista de clientes tem uma alteração no campo de 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 as alterações de dados feitas em um dos controles sejam propagadas para os outros controles associados.

    Observação

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

    O tipo de alteração é descrito pela ListChangedType propriedade do ListChangedEventArgs parâmetro. 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 ListChanged evento.

    Observação

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

  • IBindingListView interface

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

  • IEditableObject interface

    Uma classe que implementa a IEditableObject interface permite que um objeto controle quando as alterações nesse objeto se tornam permanentes. Essa implementação fornece os BeginEditmétodos , e CancelEdit , EndEditque permitem reverter as alterações feitas no objeto. A seguir está uma breve explicação do funcionamento dos BeginEditmétodos , EndEdite CancelEdit e como eles funcionam em conjunto uns com os outros para permitir uma possível reversão das alterações feitas nos dados:

    • O BeginEdit método sinaliza o início de uma edição em um objeto. Um objeto que implementa essa interface precisará armazenar todas as atualizações após a chamada de método de BeginEdit tal forma que as atualizações possam ser descartadas se o CancelEdit método for chamado. Na vinculação de dados do Windows Forms, você pode chamar BeginEdit várias vezes dentro do escopo de uma única transação de edição (por exemplo, , , BeginEditBeginEditEndEdit). 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 para ele sejam não destrutivas; ou seja, as chamadas subsequentes BeginEdit não podem destruir as atualizações que foram feitas ou alterar os dados que foram salvos na primeira BeginEdit chamada.

    • O EndEdit método envia por push todas as alterações desde que BeginEdit foi chamado para o objeto subjacente, se o objeto estiver atualmente no modo de edição.

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

    Para obter mais informações sobre como os BeginEditmétodos , e e CancelEdit funcionam, EndEditconsulte Salvar dados de volta ao banco de dados.

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

  • ICancelAddNew interface

    Uma classe que implementa a interface geralmente implementa a ICancelAddNewIBindingList interface e permite que você reverta uma adição feita à fonte de dados com o AddNew método. Se sua fonte de dados implementa a interface, você também deve fazê-la implementar a IBindingListICancelAddNew interface.

  • IDataErrorInfo interface

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

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

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

  • IEnumerable interface

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

    Observação

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

  • ITypedList interface

    Uma classe collections que implementa a interface fornece a capacidade de controlar a ITypedList ordem e o conjunto de propriedades expostas ao controle acoplado.

    Observação

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

  • ICustomTypeDescriptor interface

    Uma classe que implementa a ICustomTypeDescriptor interface fornece informações dinâmicas sobre si mesma. Essa interface é semelhante, 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 CustomTypeDescriptor classe.

    Observação

    Para oferecer suporte à vinculação em tempo de design para tipos que implementam ICustomTypeDescriptor, o tipo também deve implementar IComponent e existir como uma instância no formulário.

  • IListSource interface

    Uma classe que implementa a interface habilita a IListSource vinculação baseada em lista em objetos que não são da lista. O GetList método de é usado para retornar uma lista vinculável de um objeto que não herda de IListSourceIList. IListSource é usado pela DataSet classe.

  • IRaiseItemChangedEvents interface

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

    Observação

    Você deve implementar o if sua fonte de dados fornece a propriedade para listar a conversão de eventos descrita anteriormente e está interagindo com o IRaiseItemChangedEventsBindingSource componente. 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 ISupportInitialize interface aproveita as vantagens das otimizações em lote para definir propriedades e inicializar propriedades codependentes. O ISupportInitialize contém dois métodos:

    • BeginInit sinaliza que a inicialização do objeto está sendo iniciada.

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

  • ISupportInitializeNotification interface

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

  • INotifyPropertyChanged interface

    Uma classe que implementa essa interface é um tipo que aciona um evento quando qualquer um dos seus valores de propriedade são alterados. 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 , um BindingList<T>objeto de negócios deve implementar a INotifyPropertyChanged interface e o BindingList'1 converterá PropertyChanged eventos em ListChanged eventos do tipo ItemChanged.

    Observação

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

Interfaces para implementação por autores de componentes

As seguintes interfaces são projetadas para consumo pelo mecanismo de associação de dados dos Windows Forms:

Confira também