Я пытаюсь использовать Microsoft Hierarchical FlexGrid (MSHFlexGrid) в Visual C ++ (VS 2005). У меня есть показанная сетка, и я могу вручную добавить данные в отдельные ячейки. Тем не менее, согласно онлайновой документации , которую я прочитал, я должен быть в состоянии показать иерархическую природу данных (следовательно, MSHFlexGrid вместо MSFlexGrid), определив SHAPE в качестве RecordSource. Я могу сделать это нормально (используя метод put_RecordSource объекта grid), однако я не знаю, как добавить фактические данные.
Я прочитал, что лучший способ сделать это - использовать компонент управления данными ADO (т.е. ADODC) и связать его как источник данных для сетки. Затем вы можете указать "provider = msdatashape; поставщик данных = нет;" как поставщик DataControl и заполнить его данными. Если бы я делал SQL, я бы указал свой запрос SELECT в качестве RecordSource, затем вызвал бы 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;
....
В кпп:
....
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;
}