Используйте MSHFlexGrid с данными, отличными от базы данных, и по-прежнему определяйте форму

StackOverflow https://stackoverflow.com/questions/1732721

  •  20-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь использовать иерархическую гибкую сетку Microsoft (MSHFlexGrid) в Visual C ++ (VS 2005).У меня есть показанная сетка, и я могу вручную добавлять данные в отдельные ячейки.Однако, согласно онлайн Документация Я читал, я должен быть в состоянии показать иерархическую природу данных (следовательно, MSHFlexGrid вместо MSFlexGrid), определив ФОРМУ в качестве источника записи.Я могу сделать это нормально (используя метод put_RecordSource объекта grid), однако я в недоумении относительно того, как добавить фактические данные.

Я читал, что лучший способ сделать это - использовать компонент ADO Data Control (т. Е. ADODC) и привязать его в качестве источника данных для сетки.Затем вы можете указать "provider=msdatashape;поставщик данных=нет;" в качестве поставщика DataControl и заполнить его данными.Если бы я выполнял SQL, я бы указал свой запрос SELECT в качестве источника записи, затем вызвал Refresh() и позволил элементу управления загрузить данные.

Однако мои данные находятся в пользовательских объектах.Я знаю, что должно быть отображено, я просто в недоумении относительно наилучшего способа вставить данные в FlexGrid и при этом использовать встроенные функции элемента управления.Я открыт для любых предложений, но мне нужно сохранить данные локальными (т. Е. Без JET, Access и т.д.).

Вот некоторый код:

В заголовке:

....
// Variable to control the Flex Grid component
CMshflexgrid1 m_grid;  //generated by wizard from the MSHFlexGrid component

// to control the data source hierarchical information
CAdodc1 m_adodc1;
....

В cpp:

....
BOOL MyDialogClass::OnInitDialog()
{
  CDialog::OnInitDialog();

  m_grid.Clear();

  CString strCn = "provider=msdatashape;data provider=none;"; 
  m_adodc1.put_ConnectionString(strCn);

  CString BackupOfRecordSource = "";
  BackupOfRecordSource = m_adodc1.get_RecordSource();

  //CString strShape = "SHAPE APPEND new adInteger As PID, New adVarChar(10) As StudentName, ((SHAPE APPEND new adInteger As ChID, New adVarChar(10) As Course, ((SHAPE APPEND new adInteger As GrndChID, New adBSTR As Description) RELATE  ChID TO GrndChID) As GrandChild) RELATE PID TO ChID) AS Child";
  CString strShape = "SHAPE APPEND new adInteger As PID, New adVarChar(10) As StudentName";
  m_adodc1.put_RecordSource(strShape);
  m_adodc1.Refresh();
  m_grid.Refresh();

  BackupOfRecordSource = m_adodc1.get_RecordSource();  //returns the strShape that I just put in

  //ADD RECORDS HERE!  HOW?

  return TRUE;
}

Нет правильного решения

Другие советы

В примере говорилось о создании ADODB.Recordset и использовании его в качестве источника данных ADODC.Приведенный вами код создает SQL и использует его в качестве источника данных ADODC.Я не думаю, что вы можете заменить ADODB.Recordset строкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top