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
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
Starten Sie ein Projekt mit MFC-ActiveX-Steuerelement-Assistent.
Klicken Sie auf den Schnittstellenknoten für das Steuerelement mit der rechten Maustaste.
Dadurch wird das Kontextmenü.
Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.
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.
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
Laden Sie das Projekt des Steuerelements.
Auf der Steuerelementeinstellungen Seite wählen Sie eine Fensterklasse aus, damit das Steuerelement als Unterklasse verwendet. Beispielsweise können Sie ein Bearbeitungssteuerelement unterordnen.
Laden Sie das Projekt des Steuerelements.
Klicken Sie auf den Schnittstellenknoten für das Steuerelement mit der rechten Maustaste.
Dadurch wird das Kontextmenü.
Klicken Sie im Kontextmenü auf Hinzufügen und dann auf Eigenschaft hinzufügen.
Geben Sie den Eigenschaftennamen im Feld Eigenschaftenname ein. Verwenden Sie MyProp für dieses Beispiel angezeigt.
Wählen Sie einen Datentyp Eigenschaftentyp aus dem Dropdown-Listenfeld aus. Verwendung von short für dieses Beispiel angezeigt.
Für Implementierungstyp auf Get/Set-Methoden.
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.
Klicken Sie auf Fertig stellen.
Ä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(); }
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.
Ä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;
Ä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); }
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;
Lassen Sie die folgende Zeile die letzte Zeile in DoPropExchange arbeiten:
PX_String(pPX, _T("MyProp"), m_strText);
Ändern Sie die OnResetState-Funktion, damit sie den folgenden Code enthält:
COleControl::OnResetState(); // Resets defaults found in DoPropExchange m_strText = AmbientDisplayName();
Ä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)