Formanty ActiveX MFC: Wiązanie danych przy użyciu formantu ActiveX
Jednym z bardziej zaawansowanych zastosowań formantów ActiveX jest powiązanie danych, który umożliwia właściwości formantu Aby powiązać z określonego pola w bazie danych.Gdy użytkownik zmienia dane w tej właściwości powiązania, formant powiadamia bazy danych i żądań uaktualniane pola rekordu.Baza danych jest następnie powiadamia kontroli sukces lub Niepowodzenie żądania.
W tym artykule omówiono formantu strony zadania.Wykonawczych interakcje wiązania danych z bazy danych spoczywa formantu kontenera.Jak zarządzać interakcje bazy danych w sieci kontener wykracza poza zakres tej dokumentacji.Jak przygotować do wiązania danych formantu zostało wyjaśnione w dalszej części tego artykułu.
Diagram koncepcyjny formantu powiązanego z danymi
COleControl Klasy zawiera dwie funkcje Członkowskie wchodzące w łatwy do wdrożenia powiązania danych.Pierwsza funkcja BoundPropertyRequestEdit, jest używana do żądania uprawnienia do zmiany wartości właściwości.BoundPropertyChanged, druga funkcja nosi nazwę po pomyślnie zmienić wartość właściwości.
W tym artykule omówiono następujące tematy:
Tworzenia zapasów, które można powiązać właściwości
Tworzenie, które można powiązać metody Get i Set
Tworzenia zapasów, które można powiązać właściwości
Możliwe jest tworzenie właściwości powiązanego z danymi zapasów, chociaż jest bardziej prawdopodobne, że można metody które można powiązać get/set.
[!UWAGA]
Właściwości zapasów mają które można powiązać i requestedit atrybuty domyślne.
Aby dodać, które można powiązać właściwości zapasów przy użyciu Kreatora dodawania właściwości
Rozpoczęcie projektu za pomocą Kreatora formantów ActiveX MFC.
Kliknij prawym przyciskiem myszy węzeł interfejsu dla formantu.
Spowoduje to otwarcie menu skrótów.
W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodaj właściwość.
Wybierz jeden z wpisów z WłaściwośćNazwa listy rozwijanej.Na przykład, można wybrać tekst.
Ponieważ tekst jest własnością podstawowego które można powiązać i requestedit atrybuty są już wyewidencjonowany.
Zaznacz pola wyboru z Atrybuty IDL tab: displaybind i defaultbind do dodawania atrybutów do definicji właściwości w ramach projektu.Plik IDL.Te atrybuty formant ma być widoczny dla użytkownika i upewnij zapasów właściwości, które można powiązać właściwości domyślnej.
W tym momencie formantu można wyświetlić dane ze źródła danych, ale użytkownik nie będzie mógł aktualizować pola danych.Jeżeli chcesz kontrolować, aby mieć możliwość aktualizacji danych, zmień OnOcmCommandOnOcmCommand funkcji wyszukiwania w następujący sposób:
#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;
Teraz można utworzyć projektu, który będzie zarejestrować formant.Po wstawieniu formantu w oknie dialogowym, Pole danych i Źródła danych zostanie dodany właściwości, a teraz można wybrać źródło danych i pola do wyświetlania w formancie.
Tworzenie, które można powiązać metody Get i Set
Oprócz powiązanego z danymi metoda get/set, można również utworzyć które można powiązać właściwości zapasów.
[!UWAGA]
Procedura ta zakłada, że formant ActiveX projektu podklas tej kontroli systemu Windows.
Aby dodać metodę które można powiązać get/set przy użyciu Kreatora dodawania właściwości
Załadować projekt programu kontroli.
Na Ustawienia sterowania strony, zaznacz klasy okna dla formantu do podklasy.Na przykład można do podklasy formantu EDYCYJNEGO.
Załadować projekt programu kontroli.
Kliknij prawym przyciskiem myszy węzeł interfejsu dla formantu.
Spowoduje to otwarcie menu skrótów.
W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodaj właściwość.
Wpisz nazwę właściwości w Nazwa właściwości pole.Użyj MyProp w tym przykładzie.
Wybierz typ danych z Typ właściwości pole listy rozwijanej.Użyj krótki w tym przykładzie.
Dla Implementacji typu, kliknij Metody Get i Set.
Zaznacz pola wyboru na karcie atrybuty IDL: które można powiązać, requestedit, displaybind, i defaultbind do dodawania atrybutów do definicji właściwości w ramach projektu.Plik IDL.Te atrybuty formant ma być widoczny dla użytkownika i upewnij zapasów właściwości, które można powiązać właściwości domyślnej.
Kliknij Zakończ.
Modyfikowanie treści SetMyProp działać tak, aby zawierał następujący kod:
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(); }
Parametr przekazany do BoundPropertyChanged i BoundPropertyRequestEdit funkcji jest identyfikatorem dispid właściwości, która jest parametr przekazany do atrybutu ID dla właściwości.Plik IDL.
Modyfikowanie OnOcmCommand działać tak, aby zawierał następujący kod:
#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;
Modyfikowanie OnDraw działać tak, aby zawierał następujący kod:
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); }
Do publicznej sekcji pliku nagłówka pliku nagłówka klasy formantu należy dodać następujące definicje (konstruktory) zmienne składowe:
CString m_strText; short m_nMyNum;
Wprowadź następujący wiersz ostatniej linii w DoPropExchange funkcji:
PX_String(pPX, _T("MyProp"), m_strText);
Modyfikowanie OnResetState działać tak, aby zawierał następujący kod:
COleControl::OnResetState(); // Resets defaults found in DoPropExchange m_strText = AmbientDisplayName();
Modyfikowanie GetMyProp działać tak, aby zawierał następujący kod:
if(AmbientUserMode()) { GetWindowText(m_strText); m_nMyNum = (short)_ttoi(m_strText); } return m_nMyNum;
Teraz można utworzyć projektu, który będzie zarejestrować formant.Po wstawieniu formantu w oknie dialogowym, Pole danych i Źródła danych zostanie dodany właściwości, a teraz można wybrać źródło danych i pola do wyświetlania w formancie.
Zobacz też
Informacje
Formanty powiązane z danymi (ADO i RDO)