Formanty MFC ActiveX: używanie powiązania danych w formancie ActiveX
Jednym z zastosowań bardziej wydajne formantów ActiveX jest powiązanie danych, który pozwala właściwość formantu do powiązania z określonego pola w bazie danych.Gdy użytkownik zmienia dane w tej właściwości powiązania, formant powiadamia z bazy danych i żąda uaktualniane pola rekordu.Następnie baza danych powiadamia kontrolę nad sukces lub Niepowodzenie żądania.
W tym artykule obejmuje stronę sterowania Twoim zadaniem.Wykonawczych interakcje wiązania danych z bazy danych jest odpowiedzialny za formantu kontenera.Jak zarządzać interakcje bazy danych w sieci kontener wykracza poza zakres tej dokumentacji.Jak przygotować próbkę kontrolną do wiązania danych jest wyjaśnione w dalszej części tego artykułu.
Diagram koncepcyjny formantu powiązanego z danymi
COleControl Klasa zawiera dwie funkcje Członkowskie wchodzące w łatwy do wdrożenia powiązania danych.Pierwsza funkcja BoundPropertyRequestEdit, jest używany do żądania uprawnienia do zmiany wartości właściwości.BoundPropertyChanged, druga funkcja jest wywoływana po wartość właściwości została pomyślnie zmieniona.
W tym artykule omówiono następujące tematy:
Tworzenie, które można powiązać właściwości podstawowego
Tworzenie metody które można powiązać Get/Set
Tworzenie, które można powiązać właściwości podstawowego
Istnieje możliwość utworzenia właściwości zapasów powiązanych z danymi, chociaż jest bardziej prawdopodobne, że będziemy chcieli Metoda które można powiązać get/set.
[!UWAGA]
Mieć właściwości zapasów które można powiązać i requestedit atrybuty domyślne.
Aby dodać za pomocą Kreatora dodawania właściwości które można powiązać właściwość zapasów
Rozpoczęcie projektu za pomocą Kreatora formantów ActiveX MFC.
Kliknij prawym przyciskiem myszy węzeł interfejsu dla pilota.
Spowoduje to otwarcie menu skrótów.
W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodaj właściwość.
Wybierz jedną z pozycji z WłaściwościNazwa listy rozwijanej. Na przykład, można wybrać tekst.
Ponieważ tekst jest właściwością zapasów które można powiązać i requestedit atrybuty są już zaznaczone.
Zaznacz następujące pola wyboru z Atrybuty IDL kartę: displaybind i defaultbind Aby dodać atrybuty do definicji właściwości w ramach projektu.Plik IDL.Te atrybuty formant ma być widoczny dla użytkownika i zrobić pień właściwość domyślna właściwość które można powiązać.
W tym momencie formant można wyświetlać dane ze źródła danych, ale użytkownik nie będzie mógł aktualizować pola danych.Jeśli chcesz również mieć możliwość aktualizacji danych, zmień swoje formant OnOcmCommandOnOcmCommand funkcja służąca do 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ć projekt, który będzie zarejestrować formant.Po wstawieniu formantu w oknie dialogowym, Pole danych i Źródła danych zostaną dodane właściwości i teraz można wybrać źródło danych i pola do wyświetlenia w formancie.
Tworzenie metody które można powiązać Get/Set
Oprócz powiązany z danymi metoda get/set, można również utworzyć które można powiązać właściwości podstawowego.
[!UWAGA]
W tej procedurze założono, że masz formantu ActiveX projektu tej podklasy sterowania systemu Windows.
Aby dodać metodę get/set które można powiązać za pomocą Kreatora dodawania właściwości
Załaduj projekt z kontroli.
Na Ustawienia sterowania zaznacz opcję dla formantu do podklasy klasy okna.Na przykład możesz do podklasy formantu EDYCYJNEGO.
Załaduj projekt z kontroli.
Kliknij prawym przyciskiem myszy węzeł interfejsu dla pilota.
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życie MyProp w tym przykładzie.
Wybierz typ danych z Typ właściwości pole listy rozwijanej.Użycie Krótki w tym przykładzie.
Dla Typ implementacji, kliknij przycisk Metody Get i Set.
Zaznacz następujące pola wyboru na karcie Atrybuty IDL: które można powiązać, requestedit, displaybind, i defaultbind Aby dodać atrybuty do definicji właściwości w ramach projektu.Plik IDL.Te atrybuty formant ma być widoczny dla użytkownika i zrobić pień właściwość domyślna właściwość które można powiązać.
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 w.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 dla swojej klasy formantu Dodaj 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ć projekt, który będzie zarejestrować formant.Po wstawieniu formantu w oknie dialogowym, Pole danych i Źródła danych zostaną dodane właściwości i teraz można wybrać źródło danych i pola do wyświetlenia w formancie.
Zobacz też
Informacje
Formanty powiązane z danymi (ADO i RDO)