Udostępnij za pośrednictwem


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

Formant powiązany 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

  1. Rozpoczęcie projektu za pomocą Kreatora formantów ActiveX MFC.

  2. Kliknij prawym przyciskiem myszy węzeł interfejsu dla formantu.

    Spowoduje to otwarcie menu skrótów.

  3. W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodaj właściwość.

  4. 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.

  5. 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

  1. Załadować projekt programu kontroli.

  2. Na Ustawienia sterowania strony, zaznacz klasy okna dla formantu do podklasy.Na przykład można do podklasy formantu EDYCYJNEGO.

  3. Załadować projekt programu kontroli.

  4. Kliknij prawym przyciskiem myszy węzeł interfejsu dla formantu.

    Spowoduje to otwarcie menu skrótów.

  5. W menu skrótów kliknij polecenie Dodaj i kliknij przycisk Dodaj właściwość.

  6. Wpisz nazwę właściwości w Nazwa właściwości pole.Użyj MyProp w tym przykładzie.

  7. Wybierz typ danych z Typ właściwości pole listy rozwijanej.Użyj krótki w tym przykładzie.

  8. Dla Implementacji typu, kliknij Metody Get i Set.

  9. 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.

  10. Kliknij Zakończ.

  11. 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();
    }
    
  12. 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.

  13. 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;
    
  14. 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);
    }
    
  15. 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;
    
  16. Wprowadź następujący wiersz ostatniej linii w DoPropExchange funkcji:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Modyfikowanie OnResetState działać tak, aby zawierał następujący kod:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. 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)

Koncepcje

Formanty ActiveX MFC