Je suis en train d'utiliser le Microsoft Hierarchical FlexGrid (MSHFlexGrid) dans un Visual C++ (VS 2005). J'ai la grille montrée, et je peux ajouter manuellement des données aux cellules individuelles. Cependant, selon le documentation en ligne que j'ai lu, je devrais pouvoir montrer la nature hiérarchique des données (par conséquent MSHFlexGrid au lieu de MSFlexGrid) en définissant le SHAPE comme RecordSource. Je peux le faire très bien (en utilisant la méthode put_RecordSource de l'objet grille), mais je ne sais pas comment ajouter les données réelles.Utilisez un MSHFlexGrid avec des données non-base de données et définissent toujours la forme
J'ai lu que la meilleure façon de le faire est d'utiliser un composant ADO Data Control (c.-à-ADODC) et le lier comme source de données pour la grille. Vous pouvez ensuite spécifier "provider = msdatashape; data provider = none;" en tant que fournisseur du DataControl et le remplir avec des données. Si je faisais SQL, je spécifierais ma requête SELECT comme RecordSource, puis j'appellerais Refresh() et laisserais le contrôle charger les données.
Cependant, mes données dans des objets personnalisés. Je sais ce qui doit être affiché, je suis juste à une perte quant à la meilleure façon d'insérer les données dans le FlexGrid et toujours utiliser les fonctionnalités intégrées du contrôle. Je suis ouvert à toutes les suggestions, mais je dois garder les données locales (c'est-à-dire pas de JET, Access, etc.).
Voici quelques code:
En-tête:
....
// 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;
....
En 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;
}
Est-il possible d'utiliser le jeu d'enregistrements et d'y ajouter manuellement des enregistrements? Les exemples que j'ai trouvés en ligne montrent le code VB6 pour ce faire, mais je n'ai aucune idée de la façon de le faire en C++. – user210825
ADO est basé sur COM, l'objet que vous créez et la méthode que vous appelez sont les mêmes. –