Поделиться через


Элементы управления ActiveX MFC: Использование привязки данных элемента управления ActiveX

Это мощная использует один из элементов управления ActiveX привязка данных, что позволяет свойство элемента управления в привязке с конкретным полем в базе данных.Когда пользователь изменяет данные в этом связанном свойстве элемент управления уведомляет базы данных и запрашивает создание записи поле было обновлено.База данных, после чего уведомляет элемент управления успешном или неуспешном завершении запроса.

В этой статье описывается сторону элемента управления задачи.Реализация взаимодействия привязки данных с базой данных за контейнера элемента управления.Как управлять взаимодействия базы данных в контейнере вне области этой документации.Способ подготовки элемента управления для привязки данных рассматривается в оставшейся части этой статьи.

Концептуальная схема элемента управления с привязкой к данным

Элемент управления с привязкой к данным

Класс COleControl предоставляет 2 функции-члена, делают привязкой данных простой процесс для реализации.Функция first, BoundPropertyRequestEdit используется, чтобы запросить разрешение на изменение значения свойства.BoundPropertyChanged, вторая функция вызывается после того, как успешно значение свойства было изменено.

Данный раздел содержит следующие подразделы.

  • Создание связываемая существует стандартное свойство

  • Создание связываемая возвращает/метод Set

Создание связываемая существует стандартное свойство

Можно создать данные-привязанное существует стандартное свойство, хотя чаще всего, будет необходимо bindable get и Set - метод.

ПримечаниеПримечание

Стандартные свойства имеют атрибуты по умолчанию bindable и requestedit.

Добавление связываемая существует стандартное свойство с помощью мастера добавления свойства

  1. Начните проект с помощью Мастер элементов ActiveX MFC.

  2. Щелкните правой кнопкой мыши узел интерфейса для элемента управления.

    Это позволяет открыть контекстное меню.

  3. В контекстном меню выберите Добавить а затем нажмите кнопку Добавить свойство.

  4. Выберите одну из записей из раскрывающегося списка СвойствоИмя.Например, можно выбрать Текст.

    Поскольку существует стандартное свойство Текст, bindable и requestedit атрибуты уже проверены.

  5. Установите следующие флажки из вкладки Атрибуты IDL : displaybind и defaultbind для добавления атрибутов к определению свойства в idl-файле проекта.Эти атрибуты обеспечивают элемент управления видимым для пользователя и выполняют стандартные связываемое свойство свойством по умолчанию.

На этом этапе элемент управления может отображать данные из источника данных, но пользователь не сможет обновить поля данных.Если требуется, чтобы элемент управления также возможность обновления данных, измените функция OnOcmCommandOnOcmCommand для выглядеть следующим образом:

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

Теперь можно выполнить построение проекта, который регистрирует элемент управления.После вставки элемента управления в диалоговое окно свойства Поле данных, будут добавлены и Источник данных и теперь можно выбрать источник данных и поле для отображения в элементе управления.

Создание связываемая возвращает/метод Set

В дополнение к данные-привязанное get и Set - метод, можно также создать bindable существует стандартное свойство.

ПримечаниеПримечание

Эта процедура предполагает наличие проекта элемента управления ActiveX, что подклассы окна контролируют.

Добавляет получают, что и метод Set связываемая с помощью мастера добавления свойства

  1. Загрузите проект элемента управления.

  2. На странице Параметры элементов управления выберите класс окна для элемента управления к подклассу.Например, может понадобиться к подклассу элемент управления " Поле ввода ".

  3. Загрузите проект элемента управления.

  4. Щелкните правой кнопкой мыши узел интерфейса для элемента управления.

    Это позволяет открыть контекстное меню.

  5. В контекстном меню выберите Добавить а затем нажмите кнопку Добавить свойство.

  6. Введите имя в окне свойства Имя свойства.Используйте MyProp для этого примера.

  7. Выберите тип данных из раскрывающегося списка Тип свойства.Используйте short для этого примера.

  8. Для Тип реализации, нажмите кнопку Методы Get и Set.

  9. Установите следующие флажки на вкладке атрибуты IDL. bindable, requestedit, displaybind и defaultbind для добавления атрибутов к определению свойства в idl-файле проекта.Эти атрибуты обеспечивают элемент управления видимым для пользователя и выполняют стандартные связываемое свойство свойством по умолчанию.

  10. Нажмите кнопку Готово.

  11. Измените текст функции SetMyProp таким образом, что она будет содержать следующий код:

    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. Параметр, передаваемый функции BoundPropertyChanged и BoundPropertyRequestEdit dispid свойства, которое параметр, передаваемый атрибуту id () для свойства в idl-файле.

  13. Измените функцию OnOcmCommand поэтому она содержит следующий код:

    #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. Измените функцию OnDraw таким образом, что она будет содержать следующий код:

    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. Как public разделу файла заголовка файл заголовка для класса элемента управления добавьте следующие определения (конструкторы) для переменных-членов:

    CString m_strText;
    short m_nMyNum;
    
  16. Выполните следующую линией последнюю линию в DoPropExchange функций:

    PX_String(pPX, _T("MyProp"), m_strText);
    
  17. Измените функцию OnResetState таким образом, что она будет содержать следующий код:

        COleControl::OnResetState();  // Resets defaults found in DoPropExchange
       m_strText = AmbientDisplayName();
    
  18. Измените функцию GetMyProp таким образом, что она будет содержать следующий код:

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

Теперь можно выполнить построение проекта, который регистрирует элемент управления.После вставки элемента управления в диалоговое окно свойства Поле данных, будут добавлены и Источник данных и теперь можно выбрать источник данных и поле для отображения в элементе управления.

См. также

Ссылки

Элементы управления, связанные с данными (ADO и RDO)

Основные понятия

Элементы управления ActiveX MFC