MFC-ActiveX-Steuerelemente: Verwenden der Datenbindung in einem ActiveX-Steuerelement

Einer der leistungsstarkeren Verwendung von ActiveX-Steuerelementen verwendet die Datenbindung, der eine Eigenschaft des Steuerelements an die Bindung mit einem bestimmten Feld in einer Datenbank ermöglicht. Wenn ein Benutzer Daten in der gebundenen Eigenschaft ändert, benachrichtigt das Steuerelement die Datenbank und Anforderungen, dass das Datensatzfeld aktualisiert wird. Die Datenbank dann benachrichtigt das Steuerelement des Erfolgs oder Fehler zu der Anforderung.

Dieser Artikel enthält die der Aufgabe. Für das Steuerelement Die Datenbindungsinteraktionen mit der Datenbank zu implementieren ist die Verantwortung des Steuerelementcontainers. Wie Sie die Datenbankinteraktionen im Container verwalten, ist außerhalb des Umfangs dieser Dokumentation. Wie Sie bereiten, wird das Steuerelement für Datenbindung im Rest dieses Artikels erläutert.

Konzeptionelles Diagramm eines datengebundenen Steuerelements

Konzeptionelles Diagramm eines datengebundenen Steuerelements

Die COleControl-Klasse stellt zwei Memberfunktionen bereit, die die Datenbindung eines einfachen Prozesses ausführen, um zu implementieren. Die erste Funktion, BoundPropertyRequestEdit, wird verwendet, um eine Berechtigung erforderlich ist, den Eigenschaftswert zu ändern. BoundPropertyChanged, die zweite Funktion, wird aufgerufen, nachdem der Eigenschaftswert erfolgreich geändert wurde.

Dieser Artikel enthält die folgenden Themen:

  • Erstellen einer bindbaren vordefinierten Eigenschaft

  • Erstellen einer bindbaren Get/Set-Methode

Erstellen einer bindbaren vordefinierten Eigenschaft

Es ist möglich, eine datengebundene vordefinierte Eigenschaft zu erstellen, obwohl es wahrscheinlicher ist, dass Sie bereit get/Methode, legen Sie fest möchten.

Hinweis

Vordefinierte Eigenschaften haben die bindable und requestedit-Attribute standardmäßig.

So einer bindbaren vordefinierten Eigenschaft mithilfe des Assistenten zum Hinzufügen von Eigenschaften hinzufügen

  1. Starten Sie ein Projekt mit MFC-ActiveX-Steuerelement-Assistent.

  2. Klicken Sie auf den Schnittstellenknoten für das Steuerelement mit der rechten Maustaste.

    Dadurch wird das Kontextmenü.

  3. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.

  4. Wählen Sie einen der Einträge aus der Dropdownliste Eigenschaft Name. Beispielsweise können Sie Text auswählen.

    Da Text eine vordefinierte Eigenschaft ist, werden die Funktionen bindable und requestedit-Attribute bereits überprüft.

  5. Wählen Sie die folgenden Kontrollkästchen von der IDL-Attribute Registerkarte aus: displaybind und defaultbind, um die Attribute der Eigenschaftendefinition in die IDL-Datei des Projekts hinzufügen. Diese Attribute stellen das Steuerelement sichtbar auf das Benutzer und machen die vordefinierte Eigenschaft den Standard bindbare Eigenschaft.

Nun kann das Steuerelement Daten aus einer Datenquelle angezeigt, kann aber nicht in der Lage, Datenfelder zu aktualisieren. Wenn Sie das Steuerelement auch in der Lage sein soll, Daten zu aktualisieren, ändern Sie die OnOcmCommand - Funktion OnOcmCommand, um zu überprüfen, wie folgt:

#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;

Sie können das Projekt jetzt erstellen, das das Steuerelement registriert. Wenn Sie das Steuerelement in einem Dialogfeld einfügen, sind Datenfeld und die Eigenschaften Datenquelle hinzugefügt wurde und Sie können eine Datenquelle und ein Feld jetzt auswählen, die im Steuerelement angezeigt.

Erstellen einer bindbaren Get/Set-Methode

Neben einem datengebundenen get,/legen Sie Methode, können Sie auch bindbare vordefinierte Eigenschaft erstellen fest.

Hinweis

Diese Prozedur wird davon ausgegangen, dass ein ActiveX-Steuerelementprojekt haben, das ein Windows-Steuerelement als Unterklasse verwendet.

Um ein bindbares hinzuzufügen get/Methode legen Sie mit dem Assistenten zum Hinzufügen von Eigenschaften fest

  1. Laden Sie das Projekt des Steuerelements.

  2. Auf der Steuerelementeinstellungen Seite wählen Sie eine Fensterklasse aus, damit das Steuerelement als Unterklasse verwendet. Beispielsweise können Sie ein Bearbeitungssteuerelement unterordnen.

  3. Laden Sie das Projekt des Steuerelements.

  4. Klicken Sie auf den Schnittstellenknoten für das Steuerelement mit der rechten Maustaste.

    Dadurch wird das Kontextmenü.

  5. Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.

  6. Geben Sie den Eigenschaftennamen im Feld Eigenschaftenname ein. Verwenden Sie MyProp für dieses Beispiel angezeigt.

  7. Wählen Sie einen Datentyp Eigenschaftentyp aus dem Dropdown-Listenfeld aus. Verwendung von short für dieses Beispiel angezeigt.

  8. Für Implementierungstyp auf Get/Set-Methoden.

  9. Wählen Sie die folgenden Kontrollkästchen von der IDL-Attributregisterkarte aus: bindable, requestedit, displaybind und defaultbind, um die Attribute der Eigenschaftendefinition in die IDL-Datei des Projekts hinzufügen. Diese Attribute stellen das Steuerelement sichtbar auf das Benutzer und machen die vordefinierte Eigenschaft den Standard bindbare Eigenschaft.

  10. Klicken Sie auf Fertig stellen.

  11. Ändern Sie den Text der SetMyProp-Funktion, damit sie den folgenden Code enthält:

    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. Der Parameter, der den BoundPropertyChanged und BoundPropertyRequestEdit-Funktionen übergeben wird, ist das dispid der Eigenschaft, die der Parameter ist, der die id()- Attribut für die Eigenschaft in der IDL-Datei übergeben wird.

  13. Ändern Sie die OnOcmCommand-Funktion enthält, sodass sie den folgenden Code:

    #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. Ändern Sie die OnDraw-Funktion, damit sie den folgenden Code enthält:

    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. z öffentlichen Abschnitt der Headerdatei fügen die Headerdatei für die Steuerelementklasse, den folgenden Definitionen (Konstruktoren) für Membervariablen hinzu:

    CString m_strText;
    short m_nMyNum;
    
  16. Lassen Sie die folgende Zeile die letzte Zeile in DoPropExchange arbeiten:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Ändern Sie die OnResetState-Funktion, damit sie den folgenden Code enthält:

      COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. Ändern Sie die GetMyProp-Funktion, damit sie den folgenden Code enthält:

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

Sie können das Projekt jetzt erstellen, das das Steuerelement registriert. Wenn Sie das Steuerelement in einem Dialogfeld einfügen, sind Datenfeld und die Eigenschaften Datenquelle hinzugefügt wurde und Sie können eine Datenquelle und ein Feld jetzt auswählen, die im Steuerelement angezeigt.

Siehe auch

Referenz

Datengebundene Steuerelemente (ADO und RDO)

Konzepte

MFC-ActiveX-Steuerelemente