Condividi tramite


Controlli ActiveX MFC: utilizzo dell'associazione dati in un controllo ActiveX

Uno degli scopi più importanti dei controlli ActiveX rappresenta l'associazione dati, che consente la proprietà di un controllo su associazione con un campo specifico in un database. Quando un utente modifica i dati di questa proprietà associata, il controllo notifica al database e richiede che il campo del nuovo record sia aggiornato. Il database verrà quindi notifica al controllo dell'esito positivo o negativo della richiesta.

Questo articolo riguarda il lato del controllo dell'attività. Implementare le interazioni dell'associazione dati con il database è responsabilità del contenitore di controlli. Come gestire le interazioni del database nel contenitore esula di questa documentazione. Come preparato il controllo per l'associazione dati è descritto nella parte restante di questo articolo.

Diagramma concettuale di un controllo associato a dati

Diagramma concettuale di un controllo con associazione a dati

La classe di COleControl vengono fornite due funzioni membro che semplificano l'associazione dati un processo semplice per implementare. La prima funzione, BoundPropertyRequestEdit, viene utilizzata per richiedere l'autorizzazione a modificare il valore della proprietà. BoundPropertyChanged, la seconda funzione, viene chiamato dopo che il valore della proprietà è stata modificata correttamente.

Questo articolo vengono trattati i seguenti argomenti:

  • Creare una proprietà predefinita associabile

  • Creazione di un membro associabile ottenere/impostare il metodo

Creare una proprietà predefinita associabile

È possibile creare una proprietà predefinita con associazione a dati, ma è più probabile che sarà associabile ottenere/impostare il metodo.

Nota

Le proprietà predefinite presentano gli attributi di requestedit e di bindable per impostazione predefinita.

Per aggiungere una proprietà predefinita associabile tramite Aggiunta guidata proprietà

  1. Inizia un progetto utilizzando Creazione guidata controllo ActiveX MFC.

  2. Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia del controllo.

    Verrà visualizzato il menu di scelta rapida.

  3. Dal menu di scelta rapida, fare clic Aggiungi quindi fare clic Aggiungi proprietà.

  4. Selezionare una delle voci dall'elenco a discesa Proprietà Nome. Ad esempio, è possibile selezionare Testo.

    Poiché Testo è una proprietà predefinita, gli attributi di requestedit e di bindable già selezionate.

  5. Selezionare le caselle di controllo seguenti dalla scheda di Attributi IDL : displaybind e defaultbind per aggiungere attributi alla definizione della proprietà nel file .IDL del progetto. Questi attributi rendono il controllo visibili all'utente e consentono alla proprietà predefinita la proprietà associabili predefinita.

In questa fase, il controllo consente di visualizzare i dati da un'origine dati, ma non sarà possibile aggiornare i campi dati. Se si desidera che il controllo anche per poter aggiornare i dati, modificare la funzione di OnOcmCommandOnOcmCommand per essere simile al seguente:

#ifdef _WIN32
   WORD wNotifyCode = HIWORD(wParam);
#else
   WORD wNotifyCode = HIWORD(lParam);
#endif

   if(wNotifyCode==EN_CHANGE)
   {
      if(!BoundPropertyRequestEdit(DISPID_TEXT))
      {
         SetNotSupported();
      }
      else
      {
         GetText();
         // Notify container of change
         BoundPropertyChanged(DISPID_TEXT);
      }
   }

   return 0;

È ora possibile compilare il progetto, che verrà registrato il controllo. Quando si inserisce il controllo nella finestra di dialogo, le proprietà di Origine dati e di Campo dati si saranno aggiunte e sarà possibile selezionare un'origine dati e un campo da visualizzare nel controllo.

Creazione di un membro associabile ottenere/impostare il metodo

Oltre al con associazione a dati ottenere/impostare il metodo, nonché creare proprietà predefinita associabile.

Nota

Questa procedura si presuppone un progetto di controllo ActiveX che rappresenta un controllo Windows.

Per aggiungere un membro associabile ottenere/impostare il metodo tramite Aggiunta guidata proprietà

  1. Caricare il progetto del controllo.

  2. Nella pagina di Impostazioni controllo, selezionare una classe della finestra per il controllo nella sottoclasse. Ad esempio, è possibile creare una sottoclasse di un controllo di modifica.

  3. Caricare il progetto del controllo.

  4. Fare clic con il pulsante destro del mouse sul nodo dell'interfaccia del controllo.

    Verrà visualizzato il menu di scelta rapida.

  5. Dal menu di scelta rapida, fare clic Aggiungi quindi fare clic Aggiungi proprietà.

  6. Digitare il nome della proprietà nella casella di Nome proprietà. Utilizzare MyProp per questo esempio.

  7. Selezionare un tipo di dati dall'elenco a discesa Tipo proprietà. Utilizzo short per questo esempio.

  8. Per Implementation Type, fare clic Metodi Get/Set.

  9. Selezionare le caselle di controllo seguenti dalla scheda attributi IDL: bindable, requestedit, displaybind e defaultbind per aggiungere attributi alla definizione della proprietà nel file .IDL del progetto. Questi attributi rendono il controllo visibili all'utente e consentono alla proprietà predefinita la proprietà associabili predefinita.

  10. Scegliere Fine.

  11. Modificare il corpo della funzione di SetMyProp in modo che contenga il seguente codice:

    if(!BoundPropertyRequestEdit(1))
    {
       SetNotSupported();
       return;
    }
    else
    {
       if(AmbientUserMode()) // SendMessage only at run-time
       {
          _stprintf_s(m_strText.GetBuffer(10), 10, _T("%d"), newVal);
          SetWindowText(m_strText);
          m_strText.ReleaseBuffer();
       }
       else
       {
          InvalidateControl();
       }
    
       // Signal a property change 
       // This is the MFC equivalent of OnChanged()
       BoundPropertyChanged(1);
       SetModifiedFlag();
    }
    
  12. Il parametro passato alle funzioni di BoundPropertyRequestEdit e di BoundPropertyChanged è il dispid di proprietà, ovvero il parametro passato all'attributo id () per la proprietà del file .IDL.

  13. Modificare la funzione di OnOcmCommand in modo che contiene il codice seguente:

    #ifdef _WIN32
       WORD wNotifyCode = HIWORD(wParam);
    #else
       WORD wNotifyCode = HIWORD(lParam);
    #endif
    
       if(wNotifyCode==EN_CHANGE)
       {
          if(!BoundPropertyRequestEdit(DISPID_TEXT))
          {
             SetNotSupported();
          }
          else
          {
             GetText();
             // Notify container of change
             BoundPropertyChanged(DISPID_TEXT);
          }
       }
    
       return 0;
    
  14. Modificare la funzione di OnDraw in modo che contenga il seguente codice:

    if(!AmbientUserMode())
    {
       // Draw the Text property at design-time
       pdc->FillRect(rcBounds, 
          CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
       pdc->DrawText(m_strText, -1, (LPRECT)&rcBounds, 
          DT_LEFT | DT_TOP | DT_SINGLELINE);
    }
    else
    {
       DoSuperclassPaint(pdc, rcBounds);
    }
    
  15. Nella sezione public del file di intestazione il file di intestazione per la classe del controllo, aggiungere le seguenti definizioni (costruttori) per le variabili membro:

    CString m_strText;
    short m_nMyNum;
    
  16. Rendere alla riga seguente l'ultima riga in DoPropExchange lavorare:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Modificare la funzione di OnResetState in modo che contenga il seguente codice:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. Modificare la funzione di GetMyProp in modo che contenga il seguente codice:

    if(AmbientUserMode())
    {
       GetWindowText(m_strText);
       m_nMyNum = (short)_ttoi(m_strText);
    }
    return m_nMyNum;
    

È ora possibile compilare il progetto, che verrà registrato il controllo. Quando si inserisce il controllo nella finestra di dialogo, le proprietà di Origine dati e di Campo dati si saranno aggiunte e sarà possibile selezionare un'origine dati e un campo da visualizzare nel controllo.

Vedere anche

Riferimenti

Controlli associati a dati (ADO e RDO)

Concetti

Controlli ActiveX MFC